浅谈Go与习题(十六)

79 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!