web-dev-qa-db-fra.com

golang ajoute une chaîne à une tranche ... interface {}

J'ai une méthode qui a comme argument v ...interface{}, Je dois ajouter cette tranche avec un string. Voici la méthode:

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

Lorsque j'essaie avec append() cela ne fonctionne pas:

> 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

Quelle est la bonne façon de pré-ajouter dans ce cas?

17
bachr

append() ne peut ajouter que des valeurs du type correspondant au type d'élément de la tranche:

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

Donc, si vous avez les éléments en tant que []interface{}, Vous devez envelopper votre string initial dans un []interface{} Pour pouvoir utiliser append():

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

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

Sortie (essayez-le sur le Go Playground ):

[first second 3]
29
icza