一、切片问题
1.1 下面代码会输出什么?
func Test1(t *testing.T) {
i := make([]int, 5)
i = append(i, 1, 2, 3)
fmt.Println(i)
j := make([]int, 0)
j = append(j, 1, 2, 3, 4)
fmt.Println(j)
}
结果:
[0 0 0 0 0 1 2 3]
[1 2 3 4]
1.2 下面代码输出结果是什么?
func TestSlice(t *testing.T) {
var i []int
i = append(i, 1, 2, 3, 4, 5, 6)
a := i[0:4]
a = append(a, 7)
fmt.Println(a)
fmt.Println(i)
}
结果:
[1 2 3 4 7]
[1 2 3 4 7 6]
1.3 下面代码输出结果是什么?
func TestSlice(t *testing.T) {
var i = []int{1, 2, 3}
var a []int
a = append(a, 1, 2, 3)
fmt.Println(cap(i))
fmt.Println(cap(a))
}
结果:
3
4
二、函数问题
2.1 下面代码有什么错误
func funcTest(x,y int)(sum int,error){
return x+y,nil
}
解析:
第二个返回值没有命名,在函数有多个返回值时,只要有一个返回值有命名, 其他的也必须命名。如果有多个返回值必须加上括号(); 如果只有一个返回值且命名也必须加上括号()。 这里的第一个返回值有命名 sum,第二个没有命名,所以错误。
三、defer问题
func f(i int) {
fmt.Println(i)
}
func Test22(t *testing.T) {
i := 5
defer f(i)
i = i + 10
}
结果
5
func increaseA() int {
var i int
defer func() {
i++
}()
return i
}
func increaseB() (r int) {
defer func() {
r++
}()
return r
}
func Test29(t *testing.T) {
fmt.Println(increaseA())
fmt.Println(increaseB())
}
结果:
0
1
func f1() (r int) {
defer func() {
r++
}()
return 0
}
func f2() (r int) {
t := 5
defer func() {
t = t + 5
}()
return t
}
func f3() (r int) {
defer func(r int) {
r = r + 5
}(r)
return 1
}
func Test30(t *testing.T) {
fmt.Println(f1())
fmt.Println(f2())
fmt.Println(f3())
}
结果:
1
5
1