Go 在一行中初始化时,可以将类的一个元素绑定到另一个元素吗?
我有这样一个类(结构):Go 在一行中初始化时,可以将类的一个元素绑定到另一个元素吗?,go,struct,initialization,composite-literals,Go,Struct,Initialization,Composite Literals,我有这样一个类(结构): type Question struct{ Question string answerOne string answerTwo string answerCorrect string } q1:=Question{ Question:"What?", answerOne:"A", answerTwo:"B", answerCorrect: ? //I want this have similar val
type Question struct{
Question string
answerOne string
answerTwo string
answerCorrect string
}
q1:=Question{
Question:"What?",
answerOne:"A",
answerTwo:"B",
answerCorrect: ? //I want this have similar value as `answerOne`
}
我将其初始化如下:
type Question struct{
Question string
answerOne string
answerTwo string
answerCorrect string
}
q1:=Question{
Question:"What?",
answerOne:"A",
answerTwo:"B",
answerCorrect: ? //I want this have similar value as `answerOne`
}
在初始化时,我希望我的一个值与另一个值具有相似的值。有什么方法可以做到这一点吗?您不能只使用文本,但可以定义一个函数
func NewQuestion() *Question {
q := &Question{
Question: "What?",
answerOne: "A",
answerTwo: "B",
}
q.answerCorrect = q.answerOne
return q
}
// ...
q1 := NewQuestion()
您可以创建指向struct的指针,然后将该值分配给struct变量
answerCorrect
。最后,您可以打印结构指针处的值
package main
import "fmt"
// Question struct for content
type Question struct {
Question string
answerOne string
answerTwo string
answerCorrect string
}
func main() {
question := &Question{
Question: "What?",
answerOne: "A",
answerTwo: "B",
}
// apply condition to chose from the answer
question.answerCorrect = question.answerTwo
fmt.Println(*question)
}
类似于在创建
Question
值后设置correctAnswer
字段,您可以在变量previor中存储正确答案,并在复合文本中使用两次:
answerA := "A"
q := Question{
Question: "What?",
answerOne: answerA,
answerTwo: "B",
answerCorrect: answerA,
}
是的,看起来是这样。不,当然不是。是什么让你认为这是可能的?因为它是非常有用的工具。然而,我从未在其他语言中见过这样的事情。我想,也许是谷歌开发人员做的。我认为@mkopriva的解决方案比
question.answerCorrect=question.answerTwo
直接在main
中更优雅。这只是一个选项,你可以通过两者都做,但并不意味着你需要创建一个函数。你应该创建一个函数来隐藏一些特定的东西,比如“将值设置为answerCorrect
”,因为将使用您的代码的程序员对该要求一无所知。我认为您对这里的问题判断错误。您是正确的,但看问题Bunger没有提出任何具体要求。谢谢,但answerCorrect
这是一个“特定要求”和@Bungler应该创建一个函数来保护将使用此代码的程序员免受此代码的“水下岩石”的伤害。谁知道在创建“问题”对象后,他应该将值设置为answerCorrect
field?-没有人。因此,如果@bunger按照我的方式去做,它的代码会比按照你的方式去做时更干净:)