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]
Related videos on Youtube
Author by
bachr
Updated on September 20, 2020Comments
-
bachr over 3 years
I've a method that has as an argument
v ...interface{}
, I need to prepend this slice with astring
. 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 over 8 yearsYou should not have a method which takes
v ...interface{}
as an argument in the first place. -
Ezequiel Moreno over 8 yearsThis guide may be useful for you. github.com/golang/go/wiki/SliceTricks
-
bachr over 8 yearsthanks for sharing @EzequielMoreno
-
-
bachr over 8 yearsAh thanks
append([]interface{}{s}, rest...)
worked for me