Go面试题56
1: 下面的代码有什么问题?
package main
import "fmt"
func main() {
s := make([]int, 3, 9)
fmt.Println(len(s))
s2 := s[4:8]
fmt.Println(len(s2))
}
2: 下面代码输出什么?
type N int
func (n N) test() {
fmt.Println(n)
}
func main() {
var n N = 10
p := &n
n++
f1 := n.test
n++
f2 := p.test
n++
fmt.Println(n)
f1()
f2()
}
参考答案及解析
1: 答案及解析: 代码没问题, 输出3 4
. 从一个基础切片派生出的子切片的长度可能大于基础切片的长度. 假设基础切片是baseSlice
, 使用操作符[low,high]
,有如下规则:
0<= low <= high <= cap(baseSlice)
.只要上述满足这个关系,下标low
和high
都可以大于len(baseSlice)
.
2: 答案及解析: 13 11 12
. 知识点: 方法值. 当指针值赋值给变量或者作为函数参数传递时, 会立即计算并赋值改方法执行所需的接受者对象,与其绑定, 以便在稍后执行时,能隐式的传入接受者参数.
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付