go - 如何将值附加到 ...interface{}?

标签 go interface

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

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))
}

这是 playground 中的一个链接:https://play.golang.org/p/dHDwTlbRLDu

预期输出:

Initially I want 2 dogs
Now I want 2 dogs and 5 cats

实际输出:

Initially I want 2 dogs
Now I want [2 %!d(string=dogs) 5] %!s(MISSING) and %!d(MISSING) cats

最佳答案

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

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

关于go - 如何将值附加到 ...interface{}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50216961/

相关文章:

c# - 接口(interface)和只有一个抽象方法的抽象类有什么区别?

oop - 如何在 Dart 中定义接口(interface)?

go - 使用 kubernetes go 客户端扩展部署副本

json - 将 JSON 读入 GO 字符串

c++ - 将从公共(public)接口(interface)派生的类的对象存储在公共(public)容器中的最安全方法是什么?

ios - 细节 UIView 的问题

C# LINQ 筛选 IEnumerable<IX> 并表示为 IEnumerable<X :IX>

rest - 如何在 Go HTTP 服务器中有条件地设置 HTTP 状态代码?

go - 在嵌入式结构之间传递数据的最惯用的方法是什么?

go - 假设特定结构上的 json.Marshall 不可能失败是否安全?