Я чувствую себя немного глупым, так как это должно быть легко, однако я только начал с того, чтобы идти и не могу понять.Использование строкового среза, который должен быть заполнен во время выполнения
package main
import "fmt"
type Question struct {
q []string
a []string
}
func (item *Question) Add(q string, a string) {
n := len(item.q)
item.q[n] := q
item.a[n] := a
}
func main() {
var q Question
q.Add("A?", "B.")
}
При компиляции дает ошибку:
q.go:11:12: error: expected ';' or '}' or newline q.go:12:12: error: expected ';' or '}' or newline
, который относится к открывающей скобке item.q [п]: = д и следующая строка.
Я уверен, что я неправильно использую фрагменты, так как он отлично работает с простой строкой, но я не уверен, как это исправить.
Редакция: Редактирование: Я использовал его с помощью StringVectors в соответствии с рекомендациями Pat Notz, и он работает хорошо. Ниже приведен рабочий код:
package main
import (
fmt "fmt"
vector "container/vector"
)
type Question struct {
q vector.StringVector
a vector.StringVector
}
func (item *Question) Add(q string, a string) {
item.q.Push(q)
item.a.Push(a)
}
func (item *Question) Print(index int) {
if index >= item.q.Len() {
return
}
fmt.Printf("Question: %s\nAnswer: %s\n", item.q.At(index), item.a.At(index))
}
func main() {
var q Question
q.Add("A?", "B.")
q.Print(0)
}
Эта реализация намного хуже, чем использование StringVector из-за всех ненужных распределений и копирования, необходимых для этой реализации. Похоже, что в библиотеке go уже нет векторов. Доступны только списки. – Sahas
вы должны использовать 'append', чтобы добавить что-то в срез эффективно – newacct