2015-12-15 21 views
5

v ...interface{} argümanı olan bir yöntem var, bu dilimi bir string ile eklemem gerekiyor. Ben append() ile çalıştığınızdagolang bir dilim için bir dize ... arabirim {}

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

çalışmıyor:

> 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 

bu durumda başa ekleyerek uygun yolu nedir İşte yöntemdir?

+0

Öncelikle bir argüman olarak 'v ... arabirimini {} alan bir yöntem kullanmamalısınız. – Volker

+2

Bu kılavuz sizin için yararlı olabilir. https://github.com/golang/go/wiki/SliceTricks –

+0

paylaşım için teşekkürler @EzequielMoreno – bachr

cevap

13

append() sadece dilimin eleman türüne uyan türünün değerlerini ekleyebilirsiniz: Eğer []interface{} gibi öğeleri var ise

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

, sen muktedir bir []interface{} içinde senin ilk string sarmak için gelmiş append() kullanın:

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

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

Çıkış (Go Playground üzerinde denemek):

[first second 3] 
+0

Ah Teşekkürler teşekkürler ([] arayüzü {} {s}, dinlenme ...) 'benim için çalıştı – bachr