登录
首页 >  Golang >  Go问答

如何在golang中将可变参数传递给Sprintf

来源:Golang技术栈

时间:2023-03-21 18:53:08 327浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何在golang中将可变参数传递给Sprintf》,主要内容是讲解golang等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我比较懒,想给Printf函数传很多变量,可以吗?(示例代码简化为3个参数,我需要10多个参数)。

我收到以下消息:

不能在 fmt.Printf 的参数中使用 v (type []string) 作为 type []interface {}

s := []string{"a", "b", "c", "d"}  // Result from regexp.FindStringSubmatch()
fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3])  

v := s[1:]
fmt.Printf("%5s %4s %3s\n", v...)  

正确答案

是的,有可能,只需将您的切片声明为类型[]interface{},因为这是Printf()预期的。Printf()签名:

func Printf(format string, a ...interface{}) (n int, err error)

所以这将起作用:

s := []interface{}{"a", "b", "c", "d"}
fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3])

v := s[1:]
fmt.Printf("%5s %4s %3s\n", v...)

输出(去游乐场):

b    c   d
b    c   d

[]interface{}并且[]string不可兑换。有关更多详细信息,请参阅此问题+答案:

[在 go 中类型转换接口切片](https://stackoverflow.com/questions/12753805/type- converting-slices-of-interfaces-in-go)

如果您已经有 a[]string或使用了返回 a 的函数[]string,则必须手动将其转换为[]interface{},如下所示:

ss := []string{"a", "b", "c"}
is := make([]interface{}, len(ss))
for i, v := range ss {
    is[i] = v
}

好了,本文到此结束,带大家了解了《如何在golang中将可变参数传递给Sprintf》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表