题目
下面这段代码能否通过编译,不能的话原因是什么;如果通过,输出什么。
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)
也不行