Go面试题43

Posted by     "" on Tuesday, January 7, 2020

Go面试题43

1: 下面代码有什么问题?

import (
    "fmt"
    "log"
    "time"
)
func main() {

}

2: 下面代码输出什么?

func main()  {
    x := interface{}(nil)
    y := (*int)(nil)
    a := y == x
    b := y == nil
    _, c := x.(interface{})
    println(a,b,c)
}
  • A. true true true
  • B. flase true true
  • C. true true true
  • D. false true false

3: 下面代码有几处错误的地方? 请说明原因.

func main() {
    var s []int
    s = append(s,1)

    var m map[string]int
    m["one"] = 1
}

参考答案及解析

1: 答案及解析: 导入的包没有使用. 如果引入一个包, 但是未使用其中任何函数, 接口, 结构体或者变量的话, 代码将编译失败.

如果你真的需要引入包, 可以使用下划线操作符:_,来作为这个包的名字, 从而避免失败. 下划线操作符用于引入,但不使用.
我们还可以注释或者移除未使用的包.
修复代码如下:

import (
    _ "fmt"
    "log"
    "time"
)
var _ = log.Println
func main() {
    _ = time.Now
}

2: 答案及解析: D.知识点: 类型断言.

类型断言语法: i.(Type). 其中i 是接口, Type是类型或者接口.编译时会自动检测i的动态类型与Type是否一致.但是如果动态类型不存在,则断言总是失败.

3: 答案及解析: 有1出错误, 不能对nilmap直接赋值,需要使用make()初始化.但可以使用append()函数对为nilslice增加元素.

修复代码:

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["one"] = 1
}

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付