go语言中的特殊关键字

16 阅读3分钟

go语言中的特殊关键字

Go语言中共有25个关键字,这些关键字具有特定的语法功能,不可用作标识符。以下是详细分类及用法:


声明类关键字

var
用于声明变量,可指定类型或通过初始值推断类型:

var x int = 10
var y = "hello"

const
声明常量,值不可修改:

const Pi = 3.14

type
定义新类型或类型别名:

type Celsius float64
type IntSlice []int

func
声明函数或方法:

func add(a, b int) int {
    return a + b
}


流程控制类关键字

if/else
条件分支控制:

if x > 0 {
    println("positive")
} else {
    println("non-positive")
}

switch/case/default
多条件分支:

switch os := runtime.GOOS; os {
case "linux":
    println("Linux")
default:
    println(os)
}

for
循环控制(支持三种形式):

for i := 0; i < 10; i++ { /* 传统for循环 */ }
for x < 100 { /* while循环 */ }
for { /* 无限循环 */ }

range
迭代数组、切片、map等:

for idx, val := range []int{1,2,3} {
    println(idx, val)
}

break
退出当前循环:

for {
    if condition {
        break
    }
}

continue
跳过当前循环迭代:

for i := 0; i < 5; i++ {
    if i%2 == 0 {
        continue
    }
    println(i) // 只输出奇数
}

goto
跳转到指定标签(慎用):

    if err != nil {
        goto exit
    }
exit:
    println("cleanup")


并发编程关键字

go
启动goroutine(轻量级线程):

go func() {
    println("new goroutine")
}()

chan
声明通道类型:

ch := make(chan int)

select
多通道操作选择:

select {
case msg := <-ch1:
    println(msg)
case ch2 <- 1:
    println("sent")
default:
    println("no activity")
}


错误处理关键字

defer
延迟执行语句(常用于资源释放):

f, _ := os.Open("file.txt")
defer f.Close() // 函数返回前执行

panic/recover
异常处理机制:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            println("recovered:", r)
        }
    }()
    panic("unexpected error")
}


包管理关键字

import
导入包:

import (
    "fmt"
    "math/rand"
)

package
声明包名(文件首行):

package main


结构体相关关键字

struct
定义结构体类型:

type Point struct {
    X, Y int
}

interface
定义接口类型:

type Writer interface {
    Write([]byte) (int, error)
}

map
声明映射类型:

m := make(map[string]int)
m["key"] = 1


其他关键字

return
函数返回值:

func sum(a, b int) int {
    return a + b
}

fallthrough
在switch中强制执行下一个case:

switch x {
case 1:
    println("1")
    fallthrough
case 2:
    println("2") // 即使x=1也会执行
}


注意事项

  1. 所有关键字均为小写,如func而非Func
  2. 未使用的导入变量会导致编译错误,需用空白标识符_忽略:
_ = unusedVar

  1. 关键字不能用于自定义变量名、函数名等标识符。