【问题标题】:How do I append values to a ...interface{}?如何将值附加到 ...interface{}?
【发布时间】:2018-05-07 14:47:41
【问题描述】:

这是我要模拟的示例函数:

package main

import "fmt"

func main() {
    fmt.Println(fmt.Sprintf("Initially I want %d %s", 2, "dogs"))
    fmt.Println(Sprintf2("Now I want %d %s", 2, "dogs"))
}

func Sprintf2(format string, a ...interface{}) string {

return fmt.Sprintf(format + " and %d cats", append(a, 5))
}

这是游乐场的链接:https://play.golang.org/p/dHDwTlbRLDu

预期输出:

最初我想要 2 条狗
现在我想要 2 只狗和 5 只猫

实际输出:

最初我想要 2 条狗
现在我想要 [2 %!d(string=dogs) 5] %!s(MISSING) 和 %!d(MISSING) 猫

【问题讨论】:

  • a = append(a, myValue)
  • 没有按预期工作:play.golang.org/p/dHDwTlbRLDu
  • 那是因为你没有完全按照你的问题要求做。创建一个[]interface{} 变量,将您的变量添加到该变量中,然后在调用 Sprintf 时将其解压缩 (...)。
  • 所做的编辑。做到了。谢谢!

标签: go interface


【解决方案1】:

您需要先将新值附加到a 切片,然后在调用fmt.Sprintf 时解包切片:

func Sprintf2(format string, a ...interface{}) string {
    a = append(a, 5)
    return fmt.Sprintf(format+" and %d cats", a...)
}

https://play.golang.org/p/YRWzAT2Yxm_q

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2013-01-24
    相关资源
    最近更新 更多