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

时间:2016-01-03 15:55:53

标签: go string-formatting

我正在尝试在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

2 个答案:

答案 0 :(得分:5)

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

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

for _, format := range formats {
    // ...
}

答案 1 :(得分:1)

请参阅golang Forblank identifier

  

如果您循环遍历数组,切片,字符串或地图或阅读   通过一个通道,一个范围子句可以管理循环。

for key, value := range oldMap {
    newMap[key] = value
}

使用数组

的正确范围
for index, value := range formats {

如果你想跳过索引做

for _, value := range formats {