golang 面试题(十一)
考点:defer执行顺序
解答:
这道题类似第1题 需要注意到defer执行顺序和值传递 index:1肯定是最后执行的,但是index:1的第三个参数是一个函数,所以最先被调用calc("10",1,2)==>10,1,2,3 执行index:2时,与之前一样,需要先调用calc("20",0,2)==>20,0,2,2 执行到b=1时候开始调用,index:2==>calc("2",0,2)==>2,0,2,2 最后执行index:1==>calc("1",1,3)==>1,1,3,4
10 1 2 3
20 0 2 2
2 0 2 2
1 1 3 4
考点:make默认值和append
解答:
make初始化是由默认值的哦,此处默认值为0
[0 0 0 0 0 1 2 3]
</blockquote>大家试试改为:
<pre><code class="language-Go">s := make([]int, 0) s = append(s, 1, 2, 3) fmt.Println(s)//[1 2 3]</code></pre><h1>3. 下面的代码有什么问题?</h1> <pre><code class="language-Go">type UserAges struct { ages map[string]int sync.Mutex } func (ua *UserAges) Add(name string, age int) { ua.Lock() defer ua.Unlock() ua.ages[name] = age } func (ua *UserAges) Get(name string) int { if age, ok := ua.ages[name]; ok { return age } return -1 }</code></pre>
考点:map线程安全
解答:
可能会出现<code>fatal error: concurrent map read and map write</code>. 修改一下看看效果
<h1>4. 以下代码能编译过去吗?为什么?</h1> <pre><code class="language-Go">package main import ( "fmt" ) type People interface { Speak(string) string } type Stduent struct{} func (stu *Stduent) Speak(think string) (talk string) { if think == "bitch" { talk = "You are a good boy" } else { talk = "hi" } return } func main() { var peo People = Stduent{} think := "bitch" fmt.Println(peo.Speak(think)) }</code></pre>
考点:golang的方法集
解答:
编译不通过! 做错了!?说明你对golang的方法集还有一些疑问。 一句话:golang的方法集仅仅影响接口实现和方法表达式转化,与通过实例或者指针调用方法无关。
@转载,https://my.oschina.net/qiangmzsx/blog/1478739?p=1
到此这篇关于“golang 面试题(十一)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
golang基础教程
golang面试题第十一天
golang 面试题(十一)
golang面试题第十天
golang 单元测试
Golang使用感受
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了
一个 GO 语言性能问题的发现和解决
想系统学习GO语言(Golang
[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer