Могу ли я связать один элемент класса с другим при инициализации в одной строке?

У меня есть класс (структура), как это:

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`
}

Во время инициализации я хочу, чтобы одно из моих значений имело значение, аналогичное другому. Есть ли способ сделать это?

3 ответа

Решение

Вы не можете использовать только литералы, но вы можете определить функцию.

func NewQuestion() *Question {
    q := &Question{
        Question:  "What?",
        answerOne: "A",
        answerTwo: "B",
    }
    q.answerCorrect = q.answerOne
    return q
}

// ...

q1 := NewQuestion()

Аналог настройки correctAnswer поле после создания Question значение, вы можете сохранить правильный ответ в переменной и использовать его дважды в составном литерале:

answerA := "A"
q := Question{
    Question:      "What?",
    answerOne:     answerA,
    answerTwo:     "B",
    answerCorrect: answerA,
}

Вы можете создать указатель на структуру и затем присвоить значение переменной структуры answerCorrect, Наконец, вы можете напечатать указатель структуры valueAt.

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)
}
Другие вопросы по тегам