Golang中单选按钮验证的实现方法
Golang中单选按钮验证的实现方法 我尝试进行单选按钮验证。 我参考了这个教程:https://astaxie.gitbooks.io/build-web-application-with-golang/en/04.2.html 唯一的问题是,当我使用if语句时出现了错误,我不明白为什么。
main.go
func send(w http.ResponseWriter, r *http.Request) {
gender:= []int{1, 2, 3}
msg := &Message{
Name: r.FormValue("name"),
Surname: r.FormValue("surname"),
BDay: r.FormValue("bday"),
Gender: r.FormValue("gender"),
}
for _, v := range gender{
if v == r.Form.Get("gender") {
msg.Errors["Gender"] = "Please choose your Gender"
}
if msg.Validate() == false {
render(w, "templates/index.html", msg)
return
}
// 发送邮件消息
// 重定向到确认页面
}
实际上,for循环应该在另一个页面message.go中,但是我没有r *http.Request,我考虑把它放在main.go中。
message.go
type Message struct {
Name string
Surname string
BDay string
Gender string
City string
Errors map[string]string
}
func (msg *Message) Validate() bool {
msg.Errors = make(map[string]string)
if strings.TrimSpace(msg.Name) == "" {
msg.Errors["Name"] = "Please write your Name"
}
if strings.TrimSpace(msg.Surname) == "" {
msg.Errors["Surname"] = "Please write your Surname"
}
//处理日期
if strings.TrimSpace(msg.BDay) == "" {
msg.Errors["BDay"] = "Please select your BDay"
}
//处理单选按钮
if strings.TrimSpace(msg.City) == "" {
msg.Errors["City"] = "Please write your City"
}
return len(msg.Errors) == 0
}
更多关于Golang中单选按钮验证的实现方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
很抱歉,在我脑海中读出来时感觉不太妥当。我也以为您已经了解这件事了。
更多关于Golang中单选按钮验证的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我并没有"指责别人在语言允许范围内做某事的方式"。我完全没有对代码风格做出任何评论,只是建议使用ParseForm,因为我当时认为这是必要的。
2个赞
首先,将你的代码放在能够良好格式化的地方(如Github Gist、Go Playground等),或者使用三个反引号确保在此处正确格式化。
其次,你并未告诉我们具体的错误信息是什么。
第三,看起来你在尝试检查表单值之前,实际上并未使用 r.ParseForm() 来解析它们。
func main() {
fmt.Println("hello world")
}
在你的代码中,单选按钮验证存在几个问题。主要问题是类型不匹配和验证逻辑错误。
以下是修正后的代码:
main.go
func send(w http.ResponseWriter, r *http.Request) {
msg := &Message{
Name: r.FormValue("name"),
Surname: r.FormValue("surname"),
BDay: r.FormValue("bday"),
Gender: r.FormValue("gender"),
City: r.FormValue("city"),
Errors: make(map[string]string),
}
// 验证数据
if !msg.Validate() {
render(w, "templates/index.html", msg)
return
}
// 发送邮件消息
// 重定向到确认页面
}
message.go
type Message struct {
Name string
Surname string
BDay string
Gender string
City string
Errors map[string]string
}
func (msg *Message) Validate() bool {
msg.Errors = make(map[string]string)
if strings.TrimSpace(msg.Name) == "" {
msg.Errors["Name"] = "Please write your Name"
}
if strings.TrimSpace(msg.Surname) == "" {
msg.Errors["Surname"] = "Please write your Surname"
}
if strings.TrimSpace(msg.BDay) == "" {
msg.Errors["BDay"] = "Please select your BDay"
}
// 单选按钮验证
if strings.TrimSpace(msg.Gender) == "" {
msg.Errors["Gender"] = "Please choose your Gender"
} else {
// 确保性别值是有效的
validGenders := map[string]bool{"1": true, "2": true, "3": true}
if !validGenders[msg.Gender] {
msg.Errors["Gender"] = "Please select a valid Gender option"
}
}
if strings.TrimSpace(msg.City) == "" {
msg.Errors["City"] = "Please write your City"
}
return len(msg.Errors) == 0
}
HTML表单示例
<form method="POST" action="/send">
<input type="text" name="name" value="{{.Name}}">
<input type="text" name="surname" value="{{.Surname}}">
<!-- 单选按钮组 -->
<input type="radio" name="gender" value="1" {{if eq .Gender "1"}}checked{{end}}> Male
<input type="radio" name="gender" value="2" {{if eq .Gender "2"}}checked{{end}}> Female
<input type="radio" name="gender" value="3" {{if eq .Gender "3"}}checked{{end}}> Other
<input type="text" name="city" value="{{.City}}">
<input type="submit" value="Send">
</form>
主要修改点:
- 将单选按钮验证逻辑移到
Validate()方法中 - 修复了类型不匹配问题(
r.FormValue()返回字符串,不能直接与整数比较) - 使用map来验证有效的性别选项
- 在HTML模板中添加了保持选中状态的逻辑
这样实现后,当用户没有选择任何性别选项时,会显示验证错误信息。


