问题
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?
回答1:
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]
来源:https://stackoverflow.com/questions/34293572/golang-prepend-a-string-to-a-slice-interface