我认为我发现Go编译器或语法(使用go1.12.5 windows / amd64)有问题。以下内容抱怨数组文字无法寻址:
print([4]int{2,3}[:2])
我知道为什么从函数返回的数组是不可寻址的(例如Error addressing the returned slice of a function),但为什么像[4]int{2,3}
这样的数组文字不能寻址?特别是当切片和字符串文字正确时-例如,它们可以很好地工作:
print([]int{2,3,0,0}[:2])
print("2300"[:2])
此外,由于&[4]int{42,43}
是有效的表达式,所以数组常量确实是可寻址的。
我知道我可以用一片
print([]int{2,3,0,0}[:2])
但是如果我希望容量(数组长度)为编译时常数,该怎么办。
const maxLength = 4
...
print([maxLength]int{2,3}[:2])
是的,我可以分配给一个临时数组变量,但是为什么需要这样做?
使用以下内容:
fmt.Println((&[4]int{2, 3})[:2])