我正在尝试在Go中动态创建格式化字符串。我们的想法是使用格式化类型创建地图。然后循环遍历它们以输出各种类型。
最终结果是查看格式如何影响输出。
(我很欣赏这个例子会产生相同的输出,但我会随着时间的推移将$("#notificationMessageBody").html(message).promise().done(function() {
$("#notificationModal").modal('show');
});
改为其他类型)
下面是一个例子:
f
编译器抱怨import (
"fmt"
"strings"
)
var formats = []string{"%f", "%v"}
var f float32 = 1 << 24
func main() {
for format := range formats {
// Generate formatting string here
parts := "%q => " + format + "\n"
fmt.Printf(parts, format, f)
}
}
行的int()转换:
在第11行,文件ch3 / floating_point.go无法转换&#34;%q =&gt; &#34;输入int
在第11行,文件ch3 / floating_point.go无效操作:&#34;%q =&gt; &#34; + format`(不匹配的类型字符串和int)
我尝试过加入字符串,但没有运气:
parts:
同样parts:= strings.Join([]string{"%q =>",format,"\n"), " ")
fmt.Printf(parts,format,f)
也没有帮助:
fmt.Fprintf
答案 0 :(得分:5)
问题出在您的for format := range formats
构造中。请记住,range formats
将返回两个值:slice *中的实际值及其索引(这是第一个值)。因此"%q => " + format + "\n"
实际上会尝试将"%s => "
与数字迭代索引连接起来。
如果要迭代切片中包含的值,请使用以下循环:
for _, format := range formats {
// ...
}
答案 1 :(得分:1)
请参阅golang For和blank identifier
如果您循环遍历数组,切片,字符串或地图或阅读 通过一个通道,一个范围子句可以管理循环。
for key, value := range oldMap { newMap[key] = value }
使用数组
的正确范围for index, value := range formats {
如果你想跳过索引做
for _, value := range formats {