浅谈Go与习题(五)

122 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

今天来学习下Go常见的习题问题(五),也是面试中可能会遇到的,让我们来一起学习吧~

接口类型

观察下列代码,输出结果是什么?

func main() {  
    var i interface{}
    if i == nil {
        fmt.Println("nil")
        return
    }
    fmt.Println("not nil")
}
  • A. nil
  • B. not nil
  • C. compilation error

参考答案:选择A,当接口的动态值和动态类型都为nil的时候,接口类型值才为nil

map键值对

观察下列代码输出的结果是什么?

func main() {  
    s := make(map[string]int)
    delete(s, "YYQQ")
    fmt.Println(s["YYQQ"])
}

参考答案:输出0,因为删除map中不存在的键值对,不会起到任何作用,获取不存在的键值对的时候,会返回值类型对应的零值,所以返回int的零值就是0

关键字

下列选项中属于Go语言中的关键字的是?

  • A.func
  • B.struct
  • C.class
  • D.defer

参考答案:选择ABD, 下面列举了25个关键字

image.png

嵌套结构体

type People struct{}

func (p *People) ShowA() {
    fmt.Println("showA")
    p.ShowB()
}
func (p *People) ShowB() {
    fmt.Println("showB")
}

type Teacher struct {
    People
}

func (t *Teacher) ShowB() {
    fmt.Println("teacher showB")
}

func main() {
    t := Teacher{}
    t.ShowB()
}

参考答案:teacher showB

在嵌套结构体中,People 称为内部类型,Teacher 称为外部类型;通过嵌套,内部类型的属性、方法,可以为外部类型所有,此外,外部类型还可以定义自己的属性和方法,甚至可以定义与内部相同的方法,这样内部类型的方法就会被“屏蔽”,这里ShowB()方法就是同名的方法,所以把内部类型的方法给屏蔽了

全局变量

定义一个包内全局字符串变量,下列选项中正确的是()

  • A. var str string
  • B. str := “”
  • C. str = “”
  • D. var str = “” 参考答案:选择AD, B选项的:=声明方式只支持局部变量声明,C选项是赋值操作,必须在之前就要声明

总结

今天浅谈了Go的习题(五),主要介绍了GO面试中会出现的问题,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!