Go 面试题3

Posted by     "" on Wednesday, December 11, 2019
  • 下面2段代码输出什么:
func Test1(t *testing.T) {
	s := make([]int, 5)
	s = append(s,1,2,3)
	t.Log(s)
}

func Test2(t *testing.T) {
	s := make([]int,0)
	s = append(s, 1,2,3,4)
	t.Log(s)
}
  • 下面这段代码有什么缺陷:
func funcMui(x, y int) (sum int, error) {
	return x + y, nil
}
  • new()make()的区别

参考解析

第一个问题:

$ go test -v
=== RUN   Test1
--- PASS: Test1 (0.00s)
    demo1_test.go:10: [0 0 0 0 0 1 2 3]
=== RUN   Test2
--- PASS: Test2 (0.00s)
    demo1_test.go:16: [1 2 3 4]
PASS
ok      _/Users/finup/finupdata/go-projects/go-interview/chapter03      0.006s

解析: 这道题考的是使用appendslice添加元素, 第一段代码常见的错误是[1 2 3], 需要注意

第二个问题: 参考答案: 第二个返回值没有命名 参考解析: 在函数中有多个返回值时, 只要有一个返回值有命名, 其他的也必须命名. 如果有多个返回值必须加上括号(); 如果只有一个返回值且命名也必须加上括号(). 这里的第一个返回值有命名sum, 第二个没有命名, 所以错误.

第三个问题: 参考答案: new(T)make(T, args)是Go 语言内建函数,用来分配内存,但使用的类型不同. new(T) 会为T 类型的新值分配已置零的内存空间,并返回地址(指针), 即类型为*T的值.换句话说就是,返回一个指针, 该指针指向新分配的,类型为T的零值.适用于值类型, 比如数组, 结构体等

make(T,args) 返回初始化之后的T 类型的值,这个值并不是T类型的零值,也不是指针*T,是经过初始化之后的T的引用. make()适用于slice map 和channel

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付