Go 为结构中的字段赋值(如果为空)
我定义了一个结构Go 为结构中的字段赋值(如果为空),go,Go,我定义了一个结构 type data struct { invitecode string fname string lname string } 我通过解析后检索表单数据来填充它 ... r.ParseForm() new user := &data{ invitecode: r.FormValue("invitecode"), fname: r.FormValue("fname") lname: r.FormValue("lname") } 我确实想检
type data struct {
invitecode string
fname string
lname string
}
我通过解析后检索表单数据来填充它
...
r.ParseForm()
new user := &data{
invitecode: r.FormValue("invitecode"),
fname: r.FormValue("fname")
lname: r.FormValue("lname")
}
我确实想检查从表单获得的invitecode
字段是否为空,如果为空,则通过调用函数来填充它,如果为空,则用检索到的值填充它(invitecode:if newUser.invitecode==“”“{”Mr”}else{lnames.title},)。我知道go没有一个十进制运算符,我想使用它来阅读问题,这意味着使用if-else语句,但我似乎无法让它工作。更可取的是,我正在寻找一个解决方案,在分配一个新变量时进行检查。尝试下面的代码似乎不起作用。任何帮助都将不胜感激
package main
import (
"fmt"
)
type data struct {
invitecode string
fname string
lname string
}
func main() {
var user data
newUser := map[string]string{"invitecode": "", "fname": "Dude", "lname": "Did"}
user = &data{
invitecode: if newUser.invitecode == "" {"Mr"} else {lnames.title},
fname: newUser.fname,
lname: newUser.lname,
}
fmt.Println(user)
}
如果。。。else语句内联就像您在其他语言中使用三元运算符(或if/else语句)一样,您只需按程序执行即可:
user := &data{ /* ... */ }
if user.invitecode == "" {
user.invitecode = "Mr"
} else {
user.invitecode = lnames.title
}
Go没有ternaries,也不能像代码中显示的那样进行内联
if
。如果出现以下情况,则必须执行正常的:
user = &data{}
if newUser.inviteCode = "" {
user.invitecode = "Mr"
} else {
user.invitecode = lnames.title
}
等等。您可以将其提取到函数中:
func coalesce(args ...string) string {
for _,str := range args {
if str != "" {
return str
}
}
return ""
}
并像这样使用它:
user.invitecode = coalesce(lnames.title, "Mr")
当然,如果处理多个类型(不仅仅是字符串),那么每个类型都需要一个这样的函数。使用if
语句是否有问题?您引用的代码中没有任何内容试图执行您所描述的操作。我更新了问题以显示我正在尝试执行的操作Hanks,尝试一次性分配所有字段,其他字段可以分配到else块中吗?这是正确的方法吗?当然,如果这是您正在寻找的行为。是的,似乎围棋是为清晰而设计的,而不是为了简洁。没有“似乎”,围棋是以这种方式明确设计的。该语言的开发人员在他们的各种博客中多次提到Go错误处理。他们的观点非常明确和公开,即清晰>简洁。