2016-04-26 6 views
4

Ich habe einen Typ-Alias ​​für einen Slice. Und ich möchte die Scheibe anhängen können (oder Filter von der Scheibe), wenn die Scheibe ein Zeiger Empfänger:Wie an einen Slice-Zeiger-Empfänger angefügt werden

package main 

import (
    "fmt" 
) 

type itself []string 

func (h itself) appendToItself(test string) { 
    h = append(h, test) 
} 

func main() { 
    h := itself{"1", "2"} 
    h.appendToItself("3") 
    fmt.Println(h, "<- how do I make it [1,2,3]") 
} 

Log:

[1 2] <- how do I make it [1,2,3] 

Antwort

10

Sie müssen tatsächlich einen Zeiger übergeben, versuchen:

package main 

import (
    "fmt" 
) 

type itself []string 

func (h *itself) appendToItself(test string) { 
    *h = append(*h, test) 
} 

func main() { 
    h := itself{"1", "2"} 
    h.appendToItself("3") 
    fmt.Println(h, "<- how do I make it [1,2,3]") 
} 
+5

wollte nur hinzufügen * warum * das ist erforderlich. Das Slice selbst enthält 3 Werte: einen Zeiger auf das darunterliegende Array, eine "Länge" und eine "Kapazität". Wenn Sie ein Segment übergeben, geben Sie eine Kopie dieser drei Werte ein. Die Funktion kann die Elemente im Schnitt weiterhin lesen und ändern, da sie den richtigen Zeiger hat. Sie kann jedoch die Länge nicht ändern, da sie mit einer Kopie dieser Felder arbeitet. Mit einem Zeiger kann die Funktion die Länge des Originals ändern. – DanRedux

Verwandte Themen