目录
在 Go 语言中,关键字是具有特定用途和含义的保留字,它们不能被用作变量名、函数名或其他标识符。以下是对 Go 语言关键字的汇总介绍。
一、包管理相关关键字
package
:用于定义一个包,它是 Go 语言组织代码的基本单元。每个 Go 程序都是由包组成的,一个包可以包含多个文件。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
二、导入包关键字
import
:用于导入其他包,以便在当前程序中使用其中的函数、类型和变量等。可以导入标准库中的包,也可以导入第三方或自定义的包。
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
三、变量和常量定义关键字
const
:用于定义常量,常量在程序运行期间不能被修改。
package main
import "fmt"
const PI = 3.14159
func main() {
fmt.Println(PI)
}
var
:用于声明变量,可以在函数内部或包级别声明变量。
package main
import "fmt"
var name string = "Alice"
func main() {
fmt.Println(name)
}
四、函数相关关键字
func
:用于定义函数,函数是 Go 语言中可执行的代码块,用于实现特定的任务。
package main
import "fmt"
func add(a int, b int) int {
return a + b
}
func main() {
result := add(3, 4)
fmt.Println(result)
}
return
:用于从函数中返回一个或多个值。
package main
import "fmt"
func divide(a int, b int) (int, bool) {
if b == 0 {
return 0, false
}
return a / b, true
}
func main() {
result, ok := divide(10, 2)
if ok {
fmt.Println(result)
} else {
fmt.Println("Division by zero")
}
}
五、控制流关键字
if
、else
:用于条件判断,根据条件执行不同的代码块。
package main
import "fmt"
func main() {
age := 18
if age >= 18 {
fmt.Println("Adult")
} else {
fmt.Println("Minor")
}
}
for
:用于循环执行一段代码,可以用于遍历数组、切片、映射等数据结构,也可以用于普通的循环。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
switch
、case
:用于多分支选择,根据不同的条件执行不同的代码块。
package main
import "fmt"
func main() {
day := "Monday"
switch day {
case "Monday":
fmt.Println("It's Monday")
case "Tuesday":
fmt.Println("It's Tuesday")
default:
fmt.Println("Other day")
}
}
break
:用于跳出循环或switch
语句。
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
}
continue
:用于跳过当前循环的剩余部分,直接进入下一次循环。
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
}
六、数据类型关键字
interface
:用于定义接口,接口是一组方法的签名,它定义了一个类型应该具有的行为。
package main
import "fmt"
type Shape interface {
Area() float64
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.radius * c.radius
}
func main() {
c := Circle{radius: 5}
var s Shape = c
fmt.Println(s.Area())
}
struct
:用于定义结构体,结构体是一种自定义的数据类型,可以包含多个不同类型的字段。
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
p := Person{name: "Alice", age: 30}
fmt.Println(p)
}
map
:用于创建映射,映射是一种无序的键值对集合,通过键来快速访问对应的值。
package main
import "fmt"
func main() {
m := map[string]int{"apple": 5, "banana": 3}
fmt.Println(m["apple"])
}
chan
:用于创建通道,通道是一种用于在不同的 goroutine 之间进行通信的机制。
package main
import "fmt"
func main() {
ch := make(chan int)
go func() {
ch <- 42
}()
value := <-ch
fmt.Println(value)
}
七、并发相关关键字
go
:用于启动一个新的 goroutine,goroutine 是一种轻量级的线程,可以在不阻塞主线程的情况下执行并发任务。
package main
import (
"fmt"
"time"
)
func task() {
fmt.Println("Task running")
}
func main() {
go task()
time.Sleep(time.Second)
}
select
:用于在多个通道上进行选择操作,可以等待多个通道的操作完成。
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
time.Sleep(2 * time.Second)
ch1 <- "Message from ch1"
}()
go func() {
time.Sleep(3 * time.Second)
ch2 <- "Message from ch2"
}()
select {
case msg1 := <-ch1:
fmt.Println(msg1)
case msg2 := <-ch2:
fmt.Println(msg2)
}
}
八、错误处理关键字
defer
:用于延迟执行一个函数,通常用于在函数返回之前执行一些清理操作,如释放资源、关闭文件等。
package main
import "fmt"
func main() {
defer fmt.Println("Deferred statement")
fmt.Println("Normal statement")
}
panic
、recover
:用于处理程序中的异常情况。panic
用于抛出一个异常,导致程序终止执行;recover
用于捕获panic
抛出的异常,使程序可以继续执行。
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r!= nil {
fmt.Println("Recovered from panic:", r)
}
}()
panic("Something went wrong")
}
这些关键字在 Go 语言中起着至关重要的作用,掌握它们的用法对于编写高效、可靠的 Go 程序至关重要。在使用关键字时,需要注意遵循 Go 语言的语法规则和命名规范,以确保程序的正确性和可读性。