侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

Go语言中如何声明和初始化一个字符串变量?

2025-12-12 / 0 评论 / 4 阅读

题目

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)