Go面试集锦

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顾名思义是追加的意思。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,541评论 1 46
  • Go语言做Web编程非常方便,并且在开发效率和程序运行效率方面都非常优秀。相比于Java,其最大的优势就是简便易用...
    暗黑破坏球嘿哈阅读 9,086评论 6 66
  • 能力模型 选择题 [primary] 下面属于关键字的是()A. funcB. defC. structD. cl...
    _张晓龙_阅读 24,913评论 14 224
  • fmt格式化字符串 格式:%[旗标][宽度][.精度][arg索引]动词旗标有以下几种:+: 对于数值类型总是输出...
    皮皮v阅读 1,141评论 0 3
  • 第一章五个程序 都很好!但是初学编程/没有其他语言基础的不容易看懂。 记一遍不熟悉的东西: who = strin...
    暗黑破坏球嘿哈阅读 1,467评论 0 10