Go面试题44
1: 下面代码有什么问题?
func main() {
m := make(map[string]int, 2)
cap(m)
2: 下面的代码有什么问题?
func main() {
var x = nil
_ = x
}
3: 下面代码能编译通过吗?
type info struct {
result int
}
func work() (int, error) {
return 13, nil
}
func main() {
var data info
data.result, err = work()
fmt.Printf("info: %+v\n", data)
}
参考答案及解析
1: 答案及解析: 使用cap()
获取map
的容量.
使用
make
创建map
变量时可以指定第二个参数,不过会被忽略。cap()
函数适用于数组,数组指针,slice
和channel
,不适用于map
,可以使用len()
返回map
的元素个数.
2: 答案及解析: 问题: nil
用于表示interface
, 函数, maps
, slices
和 channels
的零值.如果不指定变量的类型,编译器猜不出变量的具体类型,导致编译错误.
修复代码:
func main() {
var x interface{} = nil
_ = x
}
3: 答案及解析: 编译失败: non-name data.result on left side of :=
.
不能使用短变量声明设置结构体字段值,修复代码:
func main() {
var data info
var err error
data.result, err = work()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(data)
}
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
