开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情
今天来学习下Go常见的习题问题(十六),也是面试中可能会遇到的,让我们来一起学习吧~
导入包的使用
观察下列代码,判断是否可以通过编译?
import (
"fmt"
"log"
"time"
)
func main() {
}
参考答案:不能通过编译,因为导入的包没有进行使用,如果没有使用函数、接口、结构体或者变量的话,代码编译是不通过的,如果想要引入包的初始化结构,可以使用下划线操作_,作为引入包的名字,从而避免编译失败,可以通过注释或者删除未使用的包。可以进行以下的操作
import (
_ "fmt"
"log"
"time"
)
var _ = log.Default
func main() {
_ = time.Now
}
nil 与 slice 和 map
观察下列代码,判断代码中存在的错误有哪些
func main() {
var s []int
s = append(s,23)
var m map[string]int
m["one"] = 4
}
参考答案:错误的地方是对nil的map进行赋值操作,需要使用make()操作进行初始化,而slice因为无法预知所需要的大小,所以可以是一个空的slice,第一种写法是可以的,并且会减少一次内存分配,反观map对nil的情况下取值是不会报错,增加操作会报错,如果delete一个nil map也会报错,delete一个空map是不会报错
map获取个数
观察下列代码,判断代码中存在的错误有哪些
func main() {
m := make(map[string]int,3)
cap(m)
}
参考答案:不能使用cap获取map的容量,通过make初始化map变量的时候可以指定第二个参数作为容量,但是cap方法适用于指针、slice和channel,不能用于map,可以使用len()方法来计算map的元素个数
总结
今天浅谈了Go的习题(十六),主要介绍了GO面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!