Je me sens un peu bête car cela devrait être facile, mais je viens de commencer avec go et je n'arrive pas à comprendre.Utilisation d'une tranche de chaîne à remplir à l'exécution
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.")
}
Lors de la compilation, il donne les erreurs:
q.go:11:12: error: expected ';' or '}' or newline q.go:12:12: error: expected ';' or '}' or newline
qui fait référence à l'accolade d'ouverture de item.q [n]: = q et la ligne suivante.
Je suis certain que j'utilise des tranches incorrectement car cela fonctionne bien avec une simple chaîne à la place, mais je ne suis pas sûr de savoir comment résoudre ce problème.
edit: Je l'ai ré-implémenté en utilisant StringVectors selon les conseils de Pat Notz et ça marche bien. Ce qui suit est le code de travail:
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)
}
Cette implémentation est bien pire que l'utilisation d'un StringVector, à cause de toutes les allocations et copies inutiles nécessaires à cette implémentation. On dirait que la bibliothèque de go n'a plus de vecteurs. Seules les listes sont disponibles. – Sahas
vous devriez utiliser 'append' pour ajouter ajouter quelque chose à une tranche efficacement – newacct