关于go:脉脉网友出的一道简单-Go-面试题你能答对吗

37次阅读

共计 951 个字符,预计需要花费 3 分钟才能阅读完成。

大家好,我是煎鱼。

前段时间脉脉在搞一个“我来出一道面试题”的探讨系列,其中一位脉友 @在宿雾参观的小冬瓜 出了一道 Go 题目。

来和煎鱼一起答复本人答的准不准,常识把握的怎么样吧。

(大家都说很简略,后果在投票上 50 50,错的人更多 …)

题目

Go 题目如下:

func main() {var nums1 []interface{}
    nums2 := []int{1, 3, 4}
    num3 := append(nums1, nums2)
    fmt.Println(len(num3))
}

请抉择程序的运行后果(答案)是什么?

  • A:1;
  • B:3;
  • C:4;
  • D:编译失败。

答案

题主仿佛是西昌学院的小伙伴。这里配上原题目的图(挡一下答案,选择题选完再往下看)。

如下图:

程序运行后果:

1

也就是答案是 A,输入后果是 1。

你答对了吗?咱们持续。

既然变量 num3 的长度是 1。那这里 1 个里,塞的是什么。

代码如下:

    var nums1 []interface{}
    nums2 := []int{1, 3, 4}
    num3 := append(nums1, nums2)
    fmt.Println(num3)

输入后果是 1,还是 3,还是 4?

程序运行后果:

[[1 3 4]]

这一次你答对了吗?

是为什么呢?

解析

这个 Go 题目,实质上是比拟容易被误导,一个不小心就选错了。咱们来看看 append 函数的官网定义是怎么样的。

如下函数签名:

func append(slice []Type, elems ...Type) []Type

官网对函数的作用形容是:append 函数会将元素追加到切片的开端。

再认真看看题目中的代码片段:

    var nums1 []interface{}
    nums2 := []int{1, 3, 4}
    num3 := append(nums1, nums2)

联合定义,可得悉就是会把 nums2 这个元素,追加到 nums1 变量的开端,并不会呈现什么拆开变量内的值别离追加的状况。

天然也就跃然纸上了,变量 num3 的长度只会等于 1,而这个 1 就是 nums2 变量内的元素。十分的纯天然没加工过。

总结

这道题其实从逻辑上来讲并不简单。但 Go 一些货色在应用时 i,很容易会因为下意识的了解而导致出错。

你在面试或工作中有没有遇到过这些问题呢?欢送在评论区留言和交换。

更多浏览

  • Go 想要加个箭头语法,这下更像 PHP 了!
  • Go 错误处理新思路?用左侧函数和表达式

正文完
 0