题目
Go语言中如何声明和初始化一个字符串变量?
信息
- 类型:问答
- 难度:⭐
考点
变量声明,字符串类型,初始化
快速回答
在Go语言中声明和初始化字符串变量的主要方式:
- 使用
var关键字声明后赋值:var s string; s = "Hello" - 声明同时初始化:
var s string = "Hello" - 类型推断:
var s = "Hello" - 短变量声明(最常用):
s := "Hello"
字符串是不可变的,一旦创建不能修改内容。
解析
原理说明
Go语言的string类型是值类型,底层为只读的字节切片([]byte)。字符串在内存中存储为结构体,包含指向字节数组的指针和长度信息。不可变性意味着:
- 字符串创建后内容无法修改
- 赋值操作会创建新副本
- 线程安全,可安全共享
代码示例
package main
import "fmt"
func main() {
// 方式1:声明后赋值
var s1 string
s1 = "Hello"
// 方式2:声明时初始化
var s2 string = "World"
// 方式3:类型推断
var s3 = "!"
// 方式4:短变量声明(推荐)
s4 := "Gopher"
fmt.Println(s1, s2, s3, s4) // 输出: Hello World ! Gopher
// 尝试修改字符串(错误示例)
// s4[0] = 'g' // 编译错误:cannot assign to s4[0]
}最佳实践
- 函数内部优先使用短变量声明(
:=),简洁高效 - 包级变量使用
var声明 - 多行字符串使用反引号(`):
msg := `Line 1 Line 2` - 拼接大量字符串时使用
strings.Builder(避免频繁内存分配)
常见错误
- 在函数外使用短变量声明:
// 错误示例 s := "global" // 只能在函数内使用 - 误以为字符串可修改:
s := "cat" s[0] = 'b' // 非法操作 - 混淆字节长度与字符数:
fmt.Println(len("中文")) // 输出6(UTF-8编码占3字节/字)
扩展知识
- 字符串零值为空字符串
"",不是nil - 使用
utf8.RuneCountInString()获取字符数量 - 字符串遍历:
for i, r := range "Go语言" { fmt.Printf("%d: %c\n", i, r) } // 输出: // 0: G // 1: o // 2: 语 // 5: 言 - 底层转换:
// 字符串 ↔ 字节切片 bytes := []byte("hello") str := string(bytes)