go面试题

wxvirus2022年5月12日
小于 1 分钟

面试题

题目 1:

package main

import "fmt"

func main()
    s := []string{"a", "b", "c"}

    copy(s[1:], s)

    fmt.Println(s)
}
  • A: [a a a]
  • B: [a a b]
  • C: [a a b c]
  • D: [b c c]
  • E: panic

答案为:B

提示

copy函数主要是切片的拷贝,不支持数组。将第二个切片的元素拷贝到第一个切片里,拷贝的长度为两个切片中长度较小的长度值。

一个特殊的用法,将字符串当成[]byte类型的切片

bytes := []byte("hello world")
copy(bytes, "ha ha")

会一个字符一个字符的复制:ha ha world,即将hello五个字符替换为ha ha

题目 2:

package main

import "fmt"

func main() {
    a := make([]int, 20)

    b := a[18:]
    b = append(b, 2022)

    fmt.Println(len(b), cap(b))
}
  • A: 1 2
  • B: 3 4
  • C: 3 33
  • D: 3 40

答案:B

考点

  1. 切片冒号截取操作的底层机制
  2. 切片的扩容原理
Loading...