【问题标题】:How can I write a function in Golang which takes multiple types as a parameter?如何在 Golang 中编写一个以多种类型为参数的函数?
【发布时间】:2016-08-16 22:25:50
【问题描述】:

我正在尝试在 Golang 中编写一个函数,该函数将序列化地图和切片(将其转换为字符串)。我希望它采用一个参数,但我不确定如何让它只接受地图和切片。我知道我可以使用类似以下功能的东西,但除此之外我很困惑。我仍在尝试围绕接口进行思考。

func Serialize(data interface{}) string {
    return ""
}

如果我不需要为它创建自己的结构,这是首选。非常感谢我如何允许此 Serialize 函数接受映射和结构的解释。

【问题讨论】:

  • 我的目标是类似于 fmt.Println 函数,它几乎可以接受任何内置类型。
  • 听起来不像是没有多个功能、一个界面或使用反射就无法完成的事情

标签: function go interface


【解决方案1】:

您可以简单地使用fmt.Sprintf

type foo struct {
    bar  string
    more int
}

func main() {
    s := []string{"a", "b", "c"}
    fmt.Println(Serialize(s))

    m := map[string]string{"a": "a", "b": "b"}
    fmt.Println(Serialize(m))

    t := foo{"x", 7}    
    fmt.Println(Serialize(t))
}

func Serialize(data interface{}) string {
    str := fmt.Sprintf("%v", data)
    return str
}

这将打印:

[a b c]

map[b:b a:a]

{x 7}

如果需要/需要strings.TrimSuffixstrings.TrimPrefix,您可以轻松修剪{}[]map[]

【讨论】:

  • @Acidic,虽然这个答案为您提供了一个解决方案,但它并没有解释 fmt.Printf() 如何设法实现它。如果您对 Go 函数如何处理不同类型的参数感兴趣,可以阅读 type switchesreflection。你至少不知道第一个的事实表明你没有读过一本关于 Go 的介绍性书;请做!
猜你喜欢
  • 2014-06-30
  • 2011-02-24
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
相关资源
最近更新 更多