2022-10-28:以下go语言代码输出什么?A:false false;B:true false

2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。

package main

import "fmt"

func main() {
    s := []string{"A", "B", "C"}

    t := s[:1]
    fmt.Println(&s[0] == &t[0])

    u := append(s[:1], s[2:]...)
    fmt.Println(&s[0] == &u[0])
}

















答案选C。这里的关键点是 append(s[:1], s[2:]…) 会不会导致扩容。s[:1] 相当于 s[:1:3],即容量是也是 3,因此 append 一个元素(s[2:]…)并不会导致扩容,因此第一个元素还是原来 s[0] 的元素。
在这里插入图片描述

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:福大大架构师每日一题。最新面试题,涉及golang,rust,mysql,redis,云原生,算法,分布式,网络,操作系统。
讨论数量: 2
package main

import "fmt"

func main() {
  s := []string{"A", "B", "C"}

    t := s[:1]
    fmt.Println(t)
    fmt.Println(&s[0] == &t[0])

    u := append(s[:1], s[2:]...)
    fmt.Println(u)
    fmt.Println(&s[0] == &u[0])
}

会输出

[A] true [A C] true

1年前 评论
u := append(s[:1], s[2:]...)

append 是个巨坑。看到返回给了一个新变量,以为会重新分配一个底层数组,实际并没有。u和s 会指向同一个底层数组,然后 s[2:]... 实际上只有一个元素 c 。append 会修改底层数组第二个元素为 C,这样 s 也被改变了。 [A B C] ----> [A C C]。 u 为 [AC]

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
470
粉丝
21
喜欢
37
收藏
22
排名:457
访问:1.9 万
私信
所有博文
社区赞助商