【问题标题】:Parameter that's a list of interface{} [duplicate]接口列表的参数{} [重复]
【发布时间】:2018-07-02 19:25:45
【问题描述】:

我正在尝试创建一个函数,该函数打印出传递给它的列表的len,而不管列表的类型如何。我的天真做法是:

func printLength(lis []interface{}) {
    fmt.Printf("Length: %d", len(lis))
}

但是,当尝试通过

func main() {
    strs := []string{"Hello,", "World!"}
    printLength(strs)
}

它抱怨说

cannot use strs (type []string) as type []interface {} in argument to printLength

但是,string 可以用作interface{},那为什么[]string 不能用作[]interface{}

【问题讨论】:

  • 其中一个“特别”的东西。没有办法将一种类型的切片转换为另一种类型。您必须在for 循环中手动完成...就打印长度而言,您所做的fmt.Printf() 就是这样。
  • 重复。请参阅 Go 常见问题解答:golang.org/doc/faq#convert_slice_of_interface

标签: go interface


【解决方案1】:

您可以使用reflect 包 - playground

import (
    "fmt"
    "reflect"
)
func printLength(lis interface{}) {
    fmt.Printf("Length: %d", reflect.ValueOf(lis).Len())
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多