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按照我的方式去做,它的代码会比按照你的方式去做时更干净:)