2015-12-15 17 views
5

Mam metodę, która ma jako argument v ...interface{}, Muszę wstępnie ten kawałek z string. Oto sposób:golang przedłużyć ciąg do plasterka ... interfejs {}

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

Kiedy próbuję z append() to nie działa:

> 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 

Jaki jest właściwy sposób poprzedzić w tym przypadku?

+0

Nie powinieneś mieć metody, która najpierw bierze "v ... interface {}" jako argument. – Volker

+2

Ten podręcznik może Ci się przydać. https://github.com/golang/go/wiki/SliceTricks –

+0

dzięki za udostępnienie @EzequielMoreno – bachr

Odpowiedz

13

append() można tylko dołączyć wartości typu dopasowania typ elementu plasterka:

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

Więc jeśli masz elementy jak []interface{}, trzeba zawinąć początkowej string w []interface{} aby móc używać append():

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

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

Output (spróbuj go na Go Playground):

[first second 3] 
+0

Ah dzięki 'append ([] interface {} {s}, rest ...)' pracował dla mnie – bachr