package main
import "fmt"
func main() {
num1 := 100
// 类型:int 值:100 指针:0xc00000a098
fmt.Printf("类型:%T 值:%v 指针:%v \n", num1, num1, &num1)
// num2 为指针类型
num2 := new(int)
// 类型:*int 值:0xc00000a0d0 指针:0xc000006030 指向的值:0
fmt.Printf("类型:%T 值:%v 指针:%v 指向的值:%v \n", num2, num2, &num2, *num2)
*num2 = 100
// 类型:*int 值:0xc00000a0d0 指针:0xc000006030 指向的值:100
fmt.Printf("类型:%T 值:%v 指针:%v 指向的值:%v \n", num2, num2, &num2, *num2)
// make用来给引用类型分配内存 channel map slice
str1 := make([]string, 5)
fmt.Println(str1) // [ ]
// 长度5 容量10
str1 = make([]string, 5, 10)
fmt.Println(str1) // [ ]
fmt.Println(cap(str1)) // 10
fmt.Println(len(str1)) // 5
// 初始化slice
slice1 := make([]int, 5)
fmt.Println(slice1) // [0 0 0 0 0]
fmt.Printf("%p\n", slice1) // 0xc0000c0060
// 初始化map
m1 := make(map[string]int)
m2 := make(map[string]int, 2)
fmt.Println(m1, len(m1)) //map[] 0
fmt.Println(m2, len(m2)) //map[] 0
fmt.Println("测试异常机制...")
fmt.Println("before testError...")
testError()
fmt.Println("after testError...")
}
func testError() {
defer func() {
err := recover() // 内置函数,可以捕获异常
if err != nil {
fmt.Println("err:", err)
fmt.Println("发生异常............")
}
}()
num1 := 10
num2 := 0
fmt.Println(num1 / num2)
}
类型:int 值:100 指针:0xc00000a098
类型:*int 值:0xc00000a0d0 指针:0xc000006030 指向的值:0
类型:*int 值:0xc00000a0d0 指针:0xc000006030 指向的值:100
[ ]
[ ]
10
5
[0 0 0 0 0]
0xc00000c390
map[] 0
map[] 0
测试异常机制...
before testError...
err: runtime error: integer divide by zero
发生异常............
after testError...
Process finished with the exit code 0