为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中动态构建格式化字符串

在 Golang 中动态构建格式化字符串

Go
慕村9548890 2021-12-06 17:10:49
我正在尝试在 Go 中动态创建格式化字符串。这个想法是使用格式类型创建地图。然后循环遍历它们以输出各种类型。最终结果是查看格式如何影响输出。(我很欣赏这个例子会产生相同的输出,但我会f随着时间的推移更改为其他类型)下面是一个例子:import (    "fmt"    "strings")var formats = []string{"%f", "%v"}var f float32 = 1 << 24func main() {    for format := range formats {        // Generate formatting string here        parts := "%q => " + format + "\n"        fmt.Printf(parts, format, f)    }}编译器在这一parts:行抱怨 int() 转换:在第 11 行,文件 ch3/floating_point.go 无法将 "%q => " 转换为类型 int在第 11 行,文件 ch3/floating_point.go 无效操作:"%q => " + format`(字符串和整数类型不匹配)我曾尝试加入字符串,但没有运气:parts:= strings.Join([]string{"%q =>",format,"\n"), " ")fmt.Printf(parts,format,f)也fmt.Fprintf没有帮助:for format := range formats {      // Generate formatting string here      parts := fmt.Fprintf("%q => " + format, format, f)      fmt.Println(parts)    }
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

问题出在您的for format := range formats构造中。请记住,这range formats将返回两个值:切片的实际值 * 及其索引(这是第一个值)。所以"%q => " + format + "\n"实际上会尝试"%s => "与数字迭代索引连接。


如果要迭代切片中包含的值,请使用以下循环:


for _, format := range formats {

    // ...

}


查看完整回答
反对 回复 2021-12-06
?
慕沐林林

TA贡献2016条经验 获得超9个赞

请参阅golang For和空白标识符


如果您在数组、切片、字符串或映射上循环,或从通道读取,范围子句可以管理循环。


for key, value := range oldMap {

    newMap[key] = value

}

使用数组进行范围的正确方法


for index, value := range formats {

如果你想跳过索引做


for _, value := range formats {


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信