GoWeb编程:服务器端处理表单数据及登录示例

需积分: 50 4.9k 下载量 173 浏览量 更新于2024-08-10 收藏 5.91MB PDF 举报
"《Go Web 编程》是作者为了分享Go语言进行Web开发的知识而编写的开源书籍,旨在帮助从其他语言转到Go的开发者理解Web应用的开发。本书在GitHub上更新,并鼓励更多的人参与贡献。" 在Go语言中,处理HTTP请求时,服务器端默认并不会自动解析HTTP请求的Form数据。例如,在用户登录界面,当用户输入用户名和密码并提交后,服务器端需要显式调用`r.ParseForm()`来解析表单数据,以便进一步处理。`r.Form`是一个`url.Values`类型的变量,它包含了请求的所有参数,包括URL查询字符串、POST或PUT的数据。如果URL查询字符串和POST数据存在同名参数,`r.Form`会将它们保存为一个切片。 在示例中,原始代码没有调用`r.ParseForm()`,因此在服务器端看不到用户的输入。当添加`r.ParseForm()`后,服务器端就能正确打印出用户提交的用户名和密码。例如,如果表单的`action`属性被修改为带有预设用户名的URL,服务器端的输出会显示一个包含多个值的切片。 `url.Values`结构允许对表单数据进行各种操作,如设置、添加键值对。例如: ```go v := url.Values{} v.Set("name", "Ava") v.Add("friend", "Jess") v.Add("friend", "Sarah") v.Add("friend", "Zoe") ``` 在这个例子中,`v`包含了键为"name"的值"Ava"和键为"friend"的多个值"Jess", "Sarah", "Zoe"。可以使用`v.Get()`来获取单个值,或者`v["friend"]`来获取一个值的切片。 此外,`Request`对象还提供了便捷的`FormValue()`函数,可以直接获取同名参数的第一个值,且在调用`r.FormValue()`时会自动调用`r.ParseForm()`。如果参数不存在,`FormValue()`会返回空字符串。 书中提到的`build.go`文件用于编译Markdown文件为HTML,需要先获取`github.com/russross/blackfriday`包,然后执行`go build build.go`生成HTML文件。 最后,作者鼓励读者通过QQ群和在线平台如德问进行交流学习,共同提升Go Web编程技能。本书遵循CC BY-SA 3.0许可证,允许他人在遵守一定条件下使用、分享和改编内容。