GO一题


题目

下面这段代码能否通过编译,不能的话原因是什么;如果通过,输出什么。

func main() {
	list := new([]int)
	list = append(list, 1)
	fmt.Println(list)
}

分析

list = append(list, 1)这句会提示编译错误:invalid argument: list (variable of type *[]int) is not a slice

因为list是一个只想切片的指针,不能给指针append元素,应该改成:

*list = append(*list, 1)

变种

下面这个呢?

list := new([4]int)
list = append(list, 1)
fmt.Println(list, len(*list))

list = append(list, 1)这句会提示编译错误:invalid argument: list (variable of type *[4]int) is not a slice

是因为list是一个执行[4]int类型的指针,它不是一个切片,所以就算改成*list = append(*list, 1)也不行

参考

[1]Go每日一题 今日(2022-05-14) 的题目如下


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录