每日一题(3)
# 1.下面两段代码输出什么
//1
func main() {
s := make([]int, 5)
s = append(s, 1, 2, 3)
fmt.Println(s)
}
//2
func main() {
s := make([]int, 0)
s = append(s, 1, 2, 3, 4)
fmt.Println(s)
}
//1答案 输出: [0 0 0 0 0 1 2 3]
//2答案 输出: [1 2 3 4]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
解析:这道题考的是使用append向slice中添加元素
# 2.下面这段代码有什么缺陷
func funcMui(x, y int) (sum int, error) {
return x + y, nil
}
//答案: 第二个返回值没有命名
1
2
3
4
5
6
2
3
4
5
6
解析: 在函数有多个返回值时,只要有一个返回值有命名,其它的也必须命名。如果有多个返回值必须加上括号();如果只有一个返回值且命名也必须加上()。这里的第一个返回值有命名sum, 第二个没有命名,所以错误。
# 3.new 与make的区别
答案:new(T) 和 make(T, args) 是Go语言内建函数,用来分配内存,但适用的类型不同。 new(T) 会为T类型的新值分配已置零的内存空间,并返回地址(指针),即类型为T的值。换句话说就是,返回一个指针,该指针指向新分配的、类型为T的零值。适用于值类型,如数据、结构体等。 make(T,args)返回初始化之后的T类型的值,这个值并不是T类型的零值,也不是指针T,是经过初始化之后T的引用。make()只适用于slice 、 map和 channel。
上次更新: 2022/07/13