在Go中,用 { } 包围代码块就形成了块语句

10 min read
  1. 块语句

在Go中,用 { } 包围代码块就形成了块语句。块语句中的代码可以在同一作用域中执行,类似于其他语言中的作用域块。例如:

func main() {

x := 1

{

​ y := 2

​ fmt.Println(x, y) // 输出: 1 2

}

// fmt.Println(y) // 报错

}

在这个示例中,使用 { } 应用于内部代码块并将其与外部分离。由于y的作用域仅限于代码块的范围内,因此在 { } 外部无法访问y。

  1. 初始化变量

可以使用 { } 初始化定义的变量,此时会自动根据元素个数为每个变量分配空间。例如:

func main() {

a, b := []int{1, 2}, []string{"hello", "world"}

fmt.Println(a, b)

}

这里使用 { } 初始化变量a和b,分别为整数切片和字符串切片。需要注意的是,a和b的长度必须与 { } 中元素的数量匹配。

  1. 多个返回值

在Go中,函数可以返回多个值。当函数 returning 时使用 { } 可以同时返回多个值。例如:

func returnTwo() (int, string) {

return 1, "hello"

}

func main() {

x, y := returnTwo()

fmt.Println(x, y) // 输出: 1 hello

}

在该示例中,returnTwo()函数返回2个值,并且使用 { } 在main()函数中同时接收这两个值。

  1. 初始化结构体

结构体是Go中的一种复合数据类型,可以使用 { } 来初始化结构体。例如:

type person struct {

name string

age int

}

func main() {

p := person{

​ name: "Tom",

​ age: 18,

}

fmt.Println(p) // 输出: {Tom 18}

}

在这个示例中,使用 { } 来初始化一个person类型的结构体,并且初始化了该结构体的两个字段。需要注意的是,字段必须在声明时初始化,否则编译器会报错。

  1. switch 代码块

在Go中,switch语句支持 { } 语句块来扩展分支。例如:

func main() {

switch n := 2; n {

case 1:

​ fmt.Println("Case 1")

case 2:

​ {

​ fmt.Println("Case 2 start")

​ fmt.Println("Case 2 end")

​ }

default:

​ fmt.Println("Default")

}

}

在该示例中,我们可以看到Case2使用{ }语句块来扩展多个语句。通常,这样的逻辑更加清晰。

总之,{ } 在Go中广泛应用,可以用于初始化变量,创建块语句,创建代码块并返回多个值,初始化结构体和扩展switch语句等。