이것은 쉬운 것으로 여겨 져야하는 것처럼 약간 어리석은 느낌이 들지만, 나는 이제 막 시작 했으므로 알아낼 수 없습니다.런타임에 채울 문자열 슬라이스 사용
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.")
}
를 컴파일 오류를 범 :
item.q의 개구 브레이스 지칭q.go:11:12: error: expected ';' or '}' or newline q.go:12:12: error: expected ';' or '}' or newline
[N] = q 및 다음 줄.
대신에 간단한 문자열로 잘 작동하므로 조각을 잘못 사용하고있는 것이 확실합니다. 그러나이를 수정하는 방법을 모르겠습니다.
편집 : Pat Notz의 조언에 따라 StringVectors를 사용하여 다시 구현했으며 제대로 작동합니다. -하지 실제 배열
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