浅谈Go与习题(二十三)

104 阅读2分钟

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

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

goto

观察下列代码,判断是否通过编译?为什么?

func main()  {

    for i:=0;i<5 ;i++  {
    loop:
        println(i)
    }
    goto loop
}

参考答案:不能通过编译,错误信息为goto loop jumps into blockgoto用法不可以跳转到其他函数或者内层代码中,一个跳转标签必须声明在一个函数体内

slice、map操作

下列关于slice和map的操作中,正确的是?

  • A.

    var s []int
    s = append(s,2)
    
  • B.

    var m map[string]int
    m["one"] = 6 
    
  • C.

    var s []int
    s = make([]int, 0)
    s = append(s,4)
    
  • D.

    var m map[string]int
    m = make(map[string]int)
    m["one"] = 6 
    

参考答案:选择ACD,选项B中map为nil值,A nil map is equivalent to an empty map except that no elements may be added,不能进行赋值,可以进行取值操作,只是取到的值为空

取反操作

Go 语言中的取反操作是 ^,它返回一个每个 bit 位都取反的数,其他语言中的符号为 ~,对于有符号的整数来说,是按照补码进行取反操作(-x+1),对于无符号整数来说就是按位取反。

为什么两个nil值有时候会不相等?

一个接口值可以看作是一个包裹非接口值的盒子,被包裹在一个接口值中的非接口值的类型必须实现了此接口值的类型,因为很多类型的零值都是用nil来表示的,一个什么都没包裹的接口值为一个零值接口值,即nil接口值,另一个包裹着其它非接口类型的nil值的接口值,他们二者是不相等的

总结

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