Go面试集锦

作者: ironbox_boy | 来源:发表于2017-08-31 20:51 被阅读59次
    1.interface与nil的比较(具体参考)
    package main
    import (
        "fmt"
    )
    type People interface {
        Show()
    }
    type Student struct{}
    
    func (stu *Student) Show() {
    }
    
    func live() People {
        var stu *Student
        return stu
    }
    func main() {
        if live() == nil {
            fmt.Println("AAAAAAA")
        } else {
            fmt.Println(live())
            fmt.Println("BBBBBBB")
        }
    }
    //  Output: BBBBBBB
    //  ##在对interface实例化中interface{}中会存储对应的类型指针和值指针,So比较会返回false。
    //  ##打印live()后也是nil,其实过程中是做了转化。
    
    2.panic与defer之争
    package main
    import (
        "fmt"
    )
    func main() {
        defer func() { fmt.Println("A") }()
        defer func() { fmt.Println("B") }()
        defer func() { fmt.Println("C") }()
        panic("触发异常")
        defer func() { fmt.Println("D") }()
    }
    //  Output : 
    //  C
    //  B
    //  A
    //  panic: 触发异常 ...
    //  ##defer是栈式执行,out:CBA;panic之前,正常输出,之后异常。
    
    3.range循环对象变量地址误区
    package main
    import (
        "fmt"
    )
    func main() {
        pase_student()
    }
    type student struct {
        Name string
        Age  int
    }
    func pase_student() {
        m := make(map[string]*student)
        stus := []student{
            {Name: "zhou", Age: 24},
            {Name: "li", Age: 23},
            {Name: "wang", Age: 22},
        }
        fmt.Println(stus)
        for _, stu := range stus {
            m[stu.Name] = &stu
        }
        fmt.Println(m)
    }
    //  output :
    //  [{zhou 24} {li 23} {wang 22}]
    //  map[zhou:0xc42000a0e0 li:0xc42000a0e0 wang:0xc42000a0e0]
    //  ##打印过程可以看出m中键的值地址一样,因为stu是一个变量,三次都把一个变量的地址赋值给对应键。
    
    4.slice的初始化和append的语法
    package main
    import(
        "fmt"
    )
    func main() {
        s := make([]int, 3)
        fmt.Println(s)
        s = append(s, 1, 2, 3)
        fmt.Println(s)
    }
    //  Output:
    //  [0 0 0]
    //  [0 0 0 1 2 3]
    //  ##首先slice初始化会为0(非基本类型为nil),append顾名思义是追加的意思。
    

    相关文章

      网友评论

      • 6c04b382626a:第四题输出应该是:
        [0 0 0 0 0]
        [0 0 0 0 0 1 2 3]
        Jancd:@dawing 谁说4个0?自己打印试试
        ironbox_boy:@dawing 哈哈 我以为是三个来:stuck_out_tongue:

      本文标题:Go面试集锦

      本文链接:https://www.haomeiwen.com/subject/hrycjxtx.html