在Golang中如何将一个字符串添加到一个切片的开头...interface{}

24

我有一个方法,它的参数是v ...interface{},我需要在这个切片之前添加一个string。以下是这个方法:

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

在这种情况下,正确的前置方式是什么?


你不应该在第一步骤中拥有一个以 v ...interface{} 作为参数的方法。 - Volker
2
这个指南可能对你有用。https://github.com/golang/go/wiki/SliceTricks - Ezequiel Moreno
感谢分享 @EzequielMoreno - bachr
1个回答

44

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)

输出结果(在Go Playground 上尝试):

[first second 3]

啊,谢谢append([]interface{}{s}, rest...)对我有用。 - bachr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接