登录
首页 >  Golang >  Go问答

切片数组文字

来源:stackoverflow

时间:2024-04-22 10:06:32 146浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《切片数组文字》,涉及到,有需要的可以收藏一下

问题内容

我认为 go 规范存在一个小问题。以下内容抱怨数组文字不可寻址:

print([4]int{2,3}[:2])

我知道为什么从函数返回的数组不可寻址(例如,对函数返回的切片进行寻址时出错),但为什么像 [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])

规格says this about slice expressions

如果切片操作数是数组,则它必须是可寻址的。

this about addressability

操作数必须是可寻址的,即变量、指针间接寻址或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。作为可寻址性要求的一个例外,x 也可以是(可能带括号的)复合文字。

该数组不可寻址,但可以使用复合文字异常来获取可寻址的值。

数组操作数必须是可寻址的,因为结果切片的元素是可寻址的。字符串操作数不需要可寻址,因为字符串元素永远不可寻址。

好了,本文到此结束,带大家了解了《切片数组文字》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>