题目
1 写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package main func main() { go func() { // 1 在这里需要你写算法 // 2 要求每秒钟调用一次proc函数 // 3 要求程序不能退出 }() select {} } func proc() { panic("ok") } |
2 下面代码写法有什么问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package main import ( "fmt" ) type Stduent struct { Age int } func main() { kv := map[string]Stduent{"menglu": {Age: 21}} kv["menglu"].Age = 22 s := []Stduent{{Age: 21}} s[0].Age = 22 fmt.Println(kv, s) } |
答案
1.写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | func main() { go func() { for { time.Sleep(time.Second) func() { defer func() { if err := recover(); err != nil { fmt.Println("捕获异常:", err) } }() proc() }() } }() select {} } func proc() { panic("ok") } |
2
map中struct不能修改值的原因是struct类型是值类型。考虑以下情况:
1 2 | stu1 := Student{Name:"Mike", Age: 21} kv := map[string]Student{"Mike": stu1} |
我们定义了一个map,这个map的主要作用就是可以通过人的名字来直接取得该名字对应的个人信息。现在我们要修改
题外话:关于struct值传递有另外一个坑就是,对于声明了指针接收者方法的结构体,是不能直接赋值给接口的。