当前位置:首页 > 科技  > 软件

Go 语言为什么很少使用数组?

来源: 责编: 时间:2024-01-02 17:28:35 395观看
导读一、介绍在 Go 语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递。数组的长度和类型共同决定数组的类型,不同类型的数组之间不可以比较,否则在编译时会报错。因为数组的一些特性,我们在 Go 项目

一、介绍

在 Go 语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递。hiv28资讯网——每日最新资讯28at.com

数组的长度和类型共同决定数组的类型,不同类型的数组之间不可以比较,否则在编译时会报错。hiv28资讯网——每日最新资讯28at.com

因为数组的一些特性,我们在 Go 项目开发中,很少使用数组。本文我们介绍一下数组的特性。hiv28资讯网——每日最新资讯28at.com

hiv28资讯网——每日最新资讯28at.com

二、数组

1.声明方式

在 Go 语言中,数组的声明方式有三种。hiv28资讯网——每日最新资讯28at.com

示例代码:hiv28资讯网——每日最新资讯28at.com

func main() { var arr1 [2]int var arr2 = [2]int{1, 2} var arr3 = [...]int{1, 2} fmt.Println(arr1) fmt.Println(arr2) fmt.Println(arr3)}

输出结果:hiv28资讯网——每日最新资讯28at.com

[0 0][1 2][1 2]

阅读上面这段代码,我们使用三种方式声明数组,其中 arr1 和 arr2 的区别是,arr1 在声明时没有为数组赋值,所以输出结果是类型零值 [0 0]。hiv28资讯网——每日最新资讯28at.com

需要注意的是,arr3 没有指定数组的长度,而是使用 [...] 替代,这实际上是 Go 语言中声明数组的语法糖,编译时通过数组的赋值,自动推断数组的长度,我们可以使用内置函数 len() 查询数组的长度。hiv28资讯网——每日最新资讯28at.com

2.数组的特性

在了解完数组的声明方式之后,我们再来介绍一下数组具有哪些特性。hiv28资讯网——每日最新资讯28at.com

数组的长度和类型共同决定数组的类型,例如 var arr1 [2]int 和 var arr2 [3]int 是不同的类型。并且不同类型的数组之间是不可以比较的。因为数组的长度是指定的,所以数组也不可以扩容。hiv28资讯网——每日最新资讯28at.com

如果数组长度小于等于 4 时,在编译时会对数组做内存优化,程序启动时在栈区初始化数组,我们在使用数组类型时,也可以注意一下这一点。hiv28资讯网——每日最新资讯28at.com

使用数组下标访问数组中的元素时,越界访问,在编译时会报错。但是,如果我们使用变量 arr[i] 作为数组下标访问数组中的元素,在编译时无法检查是否越界访问,在运行时会引发 panic。hiv28资讯网——每日最新资讯28at.com

示例代码:hiv28资讯网——每日最新资讯28at.com

func Store() { var arr [2]int for i := 0; i < 5; i++ {  arr[i] = i + 1 } fmt.Println(arr)}

输出结果:hiv28资讯网——每日最新资讯28at.com

panic: runtime error: index out of range [2] with length 2goroutine 1 [running]:...

在作为参数传递数组类型的变量时,属于值传递,我们在使用数组类型的参数时,要特别注意这一点。hiv28资讯网——每日最新资讯28at.com

示例代码:hiv28资讯网——每日最新资讯28at.com

func main() { var arr2 = [2]int{1, 2} Get(arr2) fmt.Printf("arr2=%p/n%d/n", &arr2, arr2)}func Get(arr [2]int) { fmt.Printf("Get()=%p/n%d/n", &arr, arr)}

输出结果:hiv28资讯网——每日最新资讯28at.com

Get()=0xc0000120f0[1 2]arr2=0xc0000120b0[1 2]

阅读上面这段代码,我们可以发现数组在作为参数传递时,地址发生变化,可以证明其属于值传递,即分配一块新内存,将数组的值拷贝到新内存。hiv28资讯网——每日最新资讯28at.com

三、总结

本文我们通过介绍 Go 语言中数组的一些特性,佐证数组在 Go 项目开发中很少使用的原因。hiv28资讯网——每日最新资讯28at.com

主要原因有两点,一是数组不可以扩容;二是值传递,大数组要特别小心,如果无法避免使用大数组,可以使用数组指针。hiv28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-56426-0.htmlGo 语言为什么很少使用数组?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在 Go 项目中封装 AES 加解密客户端接口

下一篇: 面试官:说说JVM内存整体结构?线程私有还是共享的?

标签:
  • 热门焦点
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top