一、字符串連接(同類型)
若變量均為 string 類型,直接使用 + 運算符或 fmt.Sprintf:
s1 := "Hello"
s2 := "World"
result := s1 + " " + s2 // "Hello World"
result2 := fmt.Sprintf("%s %s", s1, s2) // 格式化拼接
二、不同類型轉(zhuǎn)換
1. 數(shù)值類型互轉(zhuǎn)
需顯式類型轉(zhuǎn)換(Go 不允許隱式轉(zhuǎn)換):
var i int = 42
var f float64 = float64(i) // int → float64
var u uint = uint(f) // float64 → uint(可能丟失精度)
2. 字符串 ? 數(shù)值
需使用 strconv 包:
// int → string
s := strconv.Itoa(123) // "123"
// string → int
num, err := strconv.Atoi("456") // 需處理err
// float → string
s := strconv.FormatFloat(3.14, 'f', 2, 64) // "3.14"
3. 其他類型 → 字符串
推薦 fmt.Sprintf 格式化:
b := true
s := fmt.Sprintf("%v", b) // "true"
三、接口類型處理
若變量是 interface{} 類型,需通過 類型斷言 或 類型轉(zhuǎn)換:
var val interface{} = 100
// 類型斷言
if num, ok := val.(int); ok {
fmt.Println(num + 200) // 300
}
// 類型轉(zhuǎn)換(需已知類型)
str := val.(int) // 直接斷言為int
四、注意事項
類型兼容性:非字符串類型無法直接通過 + 連接
// 錯誤示例
age := 25
str := "Age: " + age // 編譯錯誤(需將age轉(zhuǎn)為string)
格式化拼接:混合類型時建議用 fmt.Sprintf
name := "Alice"
score := 95.5
output := fmt.Sprintf("%s的成績是%.1f分", name, score)
性能優(yōu)化:大量字符串拼接建議用 strings.Builder
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("Go")
result := builder.String() // "Hello Go"
五、示例場景
// 混合類型輸出
func main() {
age := 30
height := 175.5
info := fmt.Sprintf("年齡: %d歲, 身高: %.1fcm", age, height)
fmt.Println(info) // 年齡: 30歲, 身高: 175.5cm
}