golang prepend a string to a slice ...interface{}

31,326

append() can only append values of the type matching the element type of the slice:

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

So if you have the elements as []interface{}, you have to wrap your initial string in a []interface{} to be able to use append():

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

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

Output (try it on the Go Playground):

[first second 3]
Share:
31,326

Related videos on Youtube

bachr
Author by

bachr

Updated on September 20, 2020

Comments

  • bachr
    bachr over 3 years

    I've a method that has as an argument v ...interface{}, I need to prepend this slice with a string. Here is the method:

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

    When I try with append() it doesn't work:

    > 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
    

    What's the proper way to prepend in this case?

    • Volker
      Volker over 8 years
      You should not have a method which takes v ...interface{} as an argument in the first place.
    • Ezequiel Moreno
      Ezequiel Moreno over 8 years
      This guide may be useful for you. github.com/golang/go/wiki/SliceTricks
    • bachr
      bachr over 8 years
      thanks for sharing @EzequielMoreno
  • bachr
    bachr over 8 years
    Ah thanks append([]interface{}{s}, rest...) worked for me