2016-10-06 3 views
1

https://play.golang.org/p/qxhocI6mjY"unterstützt keine Indizierung": Bereitstellung der Indizierung mit einer Schnittstelle?

In diesem Spiel, bekomme ich diesen Fehler: invalid operation: s[0] (type AlmostSlice does not support indexing) Also, ich frage mich, ist es möglich, die Indizierung zu implementieren?

eine Struktur wie folgt gegeben:

type AlmostSlice struct { 
    Entities []string 
    Id  string 
    Stuffs string 
} 

Ist es möglich, es Indizierung unterstützen zu machen?

s := AlmostSlice{Id: "bar", Entities: []string{"foo"}} 
... := s[0] 
s[0] = "stuffs" 

Zum Beispiel durch so etwas wie diese Umsetzung:

func (s *AlmostSlice) Index(i int) string { 
    return s.Entities[i] 
} 
+3

Nr. Aus der [spec] (https://golang.org/ref/spec#Index_expressions): Ein Index Ausdruck bezeichnet das "Element des Arrays, Zeiger auf Array, Slice, String oder Karte" – JimB

Antwort

1

Gute Frage. In anderen Sprachen gibt es magische Schnittstellen, die man implementieren kann, um solche Sachen zu machen, aber in Go sind die Dinge nicht vorhanden. Um Ihre Frage zu beantworten, können Sie ab 1.7 keine Indizierung für eine Struktur implementieren.

1

Sie können nicht. Go zielt darauf ab, einfach zu sein und zu tun, was es gesagt wurde, nicht zugrunde liegende Methoden zu nennen. Wenn es die Indizierung unterstützt, handelt es sich um ein Slice/Array, eine Zeichenfolge oder eine Map. So könnten Sie this tun, obwohl es wahrscheinlich nicht das ist, was Sie wollen.

Aus diesem Grund würde ich Ihnen empfehlen, einfach zu tun, was Sie in Ihrer Frage vorgeschlagen habe, die ein Verfahren zu haben ist, die ein Element aus den Entitäten nimmt:

func (s AlmostSlice) Get(i int) string { 
    return s.Entities[i] 
} 

Das heißt, so weit ist wie ich weiß, der beste Weg, um zur Zeit zu gehen.

Verwandte Themen