我正在嘗試在 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 {
// ...
}

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
請參閱golang For和空白標識符
如果您在數組、切片、字符串或映射上循環,或從通道讀取,范圍子句可以管理循環。
for key, value := range oldMap {
newMap[key] = value
}
使用數組進行范圍的正確方法
for index, value := range formats {
如果你想跳過索引做
for _, value := range formats {
- 2 回答
- 0 關注
- 345 瀏覽
添加回答
舉報
0/150
提交
取消