一、字符串连接(同类型)
若变量均为 string 类型,直接使用 + 运算符或 fmt.Sprintf:
s1 := "Hello"
s2 := "World"
result := s1 + " " + s2 // "Hello World"
result2 := fmt.Sprintf("%s %s", s1, s2) // 格式化拼接
二、不同类型转换
1. 数值类型互转
需显式类型转换(Go 不允许隐式转换):
var i int = 42
var f float64 = float64(i) // int → float64
var u uint = uint(f) // float64 → uint(可能丢失精度)
2. 字符串 ↔ 数值
需使用 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{} 类型,需通过 类型断言 或 类型转换:
var val interface{} = 100
// 类型断言
if num, ok := val.(int); ok {
fmt.Println(num + 200) // 300
}
// 类型转换(需已知类型)
str := val.(int) // 直接断言为int
四、注意事项
类型兼容性:非字符串类型无法直接通过 + 连接
// 错误示例
age := 25
str := "Age: " + age // 编译错误(需将age转为string)
格式化拼接:混合类型时建议用 fmt.Sprintf
name := "Alice"
score := 95.5
output := fmt.Sprintf("%s的成绩是%.1f分", name, score)
性能优化:大量字符串拼接建议用 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
}