2015-12-15 2 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() может только добавить значения типа соответствие типа элемента среза:

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

Так что если у вас есть элементы как []interface{}, вы должны обернуть ваш первоначальный string в []interface{}, чтобы иметь возможность использовать append():

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

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

Output (попробуйте на Go Playground):

[first second 3] 
+0

Ах спасибо 'append ([] interface {} {s}, rest ...)' работал для меня – bachr

Смежные вопросы