Can I bind one element of class to another while initializing in one line?

后端 未结 3 819
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-24 08:27

I have a class (struct) like this:

type Question struct{
    Question string
    answerOne string
    answerTwo string
    answerCorrect string
}
相关标签:
3条回答
  • 2021-01-24 08:36

    You cannot by using only literals, but you could define a function.

    func NewQuestion() *Question {
        q := &Question{
            Question:  "What?",
            answerOne: "A",
            answerTwo: "B",
        }
        q.answerCorrect = q.answerOne
        return q
    }
    
    // ...
    
    q1 := NewQuestion()
    
    0 讨论(0)
  • 2021-01-24 08:36

    You can create a pointer to struct and then assign the value to struct variable answerCorrect. Finally you can print the valueAt struct pointer.

    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)
    }
    
    0 讨论(0)
  • 2021-01-24 08:51

    Analog to setting the correctAnswer field after creating the Question value, you can store the correct answer in a variable prior, and use that twice in the composite literal:

    answerA := "A"
    q := Question{
        Question:      "What?",
        answerOne:     answerA,
        answerTwo:     "B",
        answerCorrect: answerA,
    }
    
    0 讨论(0)
提交回复
热议问题