一:Go语言的基础语法
1、变量声明:
var a int = 10
var b, c int = 20, 30
d := 40 // 简短变量声明,只能在函数内部使用
2、数组与切片:
// 数组
var arr [5]int = [5]int{1, 2, 3, 4, 5}
// 切片
s := []int{1, 2, 3}
s = append(s, 4, 5) // 追加元素
3、映射(Map):
m := make(map[string]int)
m["age"] = 25
4、条件语句:
if x > 10 {
fmt.Println("x is greater than 10")
} else if x == 10 {
fmt.Println("x is equal to 10")
} else {
fmt.Println("x is less than 10")
}
5、循环:
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// 无限循环
for {
break // 需要一个条件来跳出循环
}
// 遍历数组或切片
for index, value := range arr {
fmt.Println(index, value)
}
6、switch语句:
switch x {
case 1:
fmt.Println("x is 1") //无需break自动跳出
case 2, 3:
fmt.Println("x is 2 or 3")
default:
fmt.Println("x is neither 1, 2, nor 3")
}
7、匿名函数和闭包:
add := func(a int, b int) int {
return a + b
}
// 闭包
func makeAdder(x int) func(int) int {
return func(y int) int {
return x + y
}
}
add5 := makeAdder(5)
fmt.Println(add5(2)) // 输出7
8、并发:
(1)goroutine:
go func() {
fmt.Println("This runs in a goroutine")
}()
// 等待一段时间,确保goroutine完成(在实际应用中,应使用更合适的同步机制)
time.Sleep(1 * time.Second)
(2)通道(Channel):
ch := make(chan int)
go func() {
ch <- 42 // 发送数据到通道
}()
value := <-ch // 从通道接收数据
fmt.Println(value)
9、错误处理:
(1)错误类型:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
(2)处理错误:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}