Go面试题52

Posted by     "" on Wednesday, January 15, 2020

Go面试题52

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

type X struct {}
func (x *X) test() {
    println(x)
}

func main() {
    var a *X
    a.test()
    X{}.test()
}

2: 下面代码有什么不规范的地方吗?

func main() {
    x := map[string][string]{"one": "a", "two":"", "three":"c"}

    if v := x["two"]; v == "" {
        fmt.Println("no entry")
    }
}

参考答案及解析

1: 答案及解析: X{}是不可寻址的, 不能直接调用方法. 知识点: 在方法中, 指针类型的接受者必须是合法的指针(包括nil),或能获取实例地址.

修复代码:

func main() {
    var x *X
    a.test() // 相当于test(nil)

    var x = X{}
    x.test()
}

2: 答案及解析: 检查map是否含有某一元素, 直接判断元素的值并不是一种合适的方式. 最可靠的操作是使用访问map时返回的第二个值.

修复代码如下:

func main() {
    x := map[string]string{"one":"a", "two":"", "three": "c"}

    if _, ok := x["two"]; !ok {
        fmt.Println("no entry")
    }
}

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

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