教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang 面试题(十一)

golang 面试题(十一)

发布时间:2021-12-26   编辑:jiaochengji.com
教程集为您提供golang 面试题(十一)等资源,欢迎您收藏本站,我们将为您提供最新的golang 面试题(十一)资源
<h1 id="h3_7">1. 下面代码输出什么?</h1> <pre><code class="language-Go">func calc(index string, a, b int) int { ret := a b fmt.Println(index, a, b, ret) return ret } func main() { a := 1 b := 2 defer calc("1", a, calc("10", a, b)) a = 0 defer calc("2", a, calc("20", a, b)) b = 1 }</code></pre>

考点: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

<blockquote>

10 1 2 3
20 0 2 2
2 0 2 2
1 1 3 4

</blockquote> <h3> </h3> <h1 id="h3_8">2. 请写出以下输入内容</h1> <pre><code class="language-Go">func main() { s := make([]int, 5) s = append(s, 1, 2, 3) fmt.Println(s) }</code></pre>

考点:make默认值和append
解答:
make初始化是由默认值的哦,此处默认值为0

<blockquote>

[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>. 修改一下看看效果

<pre><code class="language-Go">func (ua *UserAges) Get(name string) int { ua.Lock() defer ua.Unlock() if age, ok := ua.ages[name]; ok { return age } return -1 }</code></pre>

 

<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

[关闭]
~ ~