2015-12-15 18 views
5

私は引数としてv ...interface{}を持つメソッドを持っていますが、このスライスの前にstringを付ける必要があります。ここで方法は次のとおりです。golangスライスに文字列を追加する... interface {}

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

私はそれが動作しませんappend()にしようとすると:

> 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 

この場合には先頭に追加する適切な方法は何ですか?

+0

最初に 'v ... interface {}'を引数として取るメソッドを持つべきではありません。 – Volker

+2

このガイドは役に立つかもしれません。 https://github.com/golang/go/wiki/SliceTricks –

+0

@EzequielMorenoをお寄せいただきありがとうございます。 – bachr

答えて

13

append()は、スライスの要素の型に一致する型の値を追加することができます:あなたは[]interface{}などの要素を持っている場合

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

だから、次のことができるようにするために[]interface{}であなたの最初のstringをラップする必要がありますappend()を使用します。

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

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

出力(Go Playground上でそれを試してみてください):

[first second 3] 
+0

ああ、ありがとうございました。[append([interface {} {rest}) – bachr

関連する問題