2015-12-15 6 views
5

Ich habe eine Methode, die als Argument v ...interface{} hat, muss ich dieses Stück mit einer string voranzustellen. Hier ist die Methode:Golang eine Zeichenfolge voranzustellen ... Schnittstelle {}

func (l Log) Error(v ...interface{}) { 
    l.Out.Println(append([]string{" ERROR "}, v...)) 
} 

Wenn ich mit append() versuchen, es funktioniert nicht:

> append("some string", v) 
first argument to append must be slice; have untyped string 
> append([]string{"some string"}, v) 
cannot use v (type []interface {}) as type string in append 

Was ist der richtige Weg, in diesem Fall vorangestellt wird?

+0

Sie sollten keine Methode haben, die 'v ... interface {}' als Argument an erster Stelle nimmt. – Volker

+2

Diese Anleitung kann für Sie nützlich sein. https://github.com/golang/go/wiki/SliceTricks –

+0

danke für die Freigabe @EzequielMoreno – bachr

Antwort

13

append() können nur Werte vom Typ den Elementtyp der Scheibe passend anhängen:

func append(slice []Type, elems ...Type) []Type 

Also, wenn Sie die Elemente wie []interface{} haben, müssen Sie Ihre erste string in einem []interface{} wickeln zu können, verwenden append():

s := "first" 
rest := []interface{}{"second", 3} 

all := append([]interface{}{s}, rest...) 
fmt.Println(all) 

Output (versuchen sie es auf dem Go Playground):

[first second 3] 
+0

Ah danke 'append ([] Schnittstelle {} {s}, Rest ...)' arbeitete für mich – bachr

Verwandte Themen