你好哇,欢迎来答题!一起来看下昨天题目的解析:
1.关于函数声明,下面语法正确的是?
-
A. func f(a, b int) (value int, err error)
-
B. func f(a int, b int) (value int, err error)
-
C. func f(a, b int) (value int, error)
-
D. func f(a int, b int) (int, int, error)
参考答案及解析:ABD。参考文章《函数》
2.关于整型切片的初始化,下面正确的是?
-
A. s := make([]int)
-
B. s := make([]int, 0)
-
C. s := make([]int, 5, 10)
-
D. s := []int{1, 2, 3, 4, 5}
参考答案及解析:BCD。参考文章《非懂不可的Slice(一)》
3.下面代码会触发异常吗?请说明。
func main() {
runtime.GOMAXPROCS(1)
int_chan := make(chan int, 1)
string_chan := make(chan string, 1)
int_chan <- 1
string_chan <- "hello"
select {
case value := <-int_chan:
fmt.Println(value)
case value := <-string_chan:
panic(value)
}
}
参考答案及解析:select 会随机选择一个可用通道做收发操作,所以可能触发异常,也可能不会。具体详看《Go 并发 -- Select》
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
1.关于channel的特性,下面说法正确的是?
-
A. 给一个 nil channel 发送数据,造成永远阻塞
-
B. 从一个 nil channel 接收数据,造成永远阻塞
-
C. 给一个已经关闭的 channel 发送数据,引起 panic
-
D. 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值
2.下面代码有什么问题?
const i = 100
var j = 123
func main() {
fmt.Println(&j, j)
fmt.Println(&i, i)
}
3.下面代码能否编译通过?如果通过,输出什么?
func GetValue(m map[int]string, id int) (string, bool) {
if _, exist := m[id]; exist {
return "exist", true
}
return nil, false
}
func main() {
intmap := map[int]string{
1: "a",
2: "b",
3: "c",
}
v, err := GetValue(intmap, 3)
fmt.Println(v, err)
}
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!