golang -- 面试题
输出结果
解释:
defer注册是方法是保存在栈中,后入先出。
panic触发后,defer方法仍然执行。但panic后面的代码不执行。
运行结果:一共10个10
解释:
传入i时,go func 会一直保存i这个变量的引用,当i在外层循环变成了10, go func 保存的i也都是10.
运行结果:
解释:
Teacher覆盖了ShowB方法,调用ShowA方法时,ShowA属于People,所以ShowA里面调用的仍然是People的ShowB方法.
运行结果:
解释:
make([]int, 5) 之后,这个list就变成[0, 0, 0, 0, 0] 了,默认0填充。
解释:
在底层,interface作为两个成员来实现,一个类型和一个值, 只有当类型未设置, 值也没有设置的时候,interface才是nil.
#代码存在问题
<h2>1. for循环</h2> <pre><code>package main import ( "fmt" ) type student struct { Name string Age int } func PaseStudent() { m := make(map[string]*student) stus := []student{ {Name: "zhou", Age: 24}, {Name: "li", Age: 23}, {Name: "wang", Age: 22}, } for _, stu := range stus { m[stu.Name] = &stu // 这里的会把stu这个变量的地址赋值给map fmt.Printf("%p \n", &stu) // for循环的变量, 不会每次都被新建 } // 显示m中的内容 for k, v := range m { fmt.Println(k, *v) } } func main() { PaseStudent() } </code></pre>运行结果:
错误:
for 循环不会每次循环的时候都新建循环变量stu, 所以将stu变量的地址赋值给map后,循环结束后,map中所以值还是指向stu地址。
改正:
<pre><code> for _, stu := range stus { s := stu // 这里新建一个变量 m[stu.Name] = &s fmt.Printf("%p \n", &stu) } </code></pre> <h2>2. type使用</h2> <pre><code>package main func main() { i := GetValue() switch i.(type) { case int: println("int") case string: println("string") case interface{}: println("interface") default: println("unknown") } } func GetValue() int { return 1 } </code></pre>运行结果:
解释:type只能用在interface上, 把func GetValue返回值从int改为interface {} 就可以了。
您可能感兴趣的文章:
golang基础教程
Golang面试题集锦
golang面试经之笔试2
golang面试经之笔试1
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了
U3D笔试题1:golang实现
go golang 笔试题 面试题 笔试 面试
Golang 高频面试题七问
golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?
Golang template 高级问题