3.1数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组中每个元素类型相同,又是连续分配,因此可以以固定的速度索引数组中的任何数据,速度非常快。

3.1.1声明和初始化

1、使用字面量声明数组:

  array := [5]int{10, 20, 30, 40, 50}

2、自动计算声明数组的长度

  //容量由初始化值的数量来决定

  array := [...]int{10, 20, 30, 40, 50}

3、声明数组并指定特定元素的值

  array := [5]int{1: 10, 2: 20}

4、指针数组

  //声明包含5个元素的指向整数的数组,并用整型指针初始化索引为0和1的数组元素

  array := [5]*int{0: new(int), 1: new(int)}

3.1.2 使用数组

1、访问数组元素

  array := [5]int{10, 20, 30, 40, 50}

  array[2] = 35 //修改索引为2的元素的值

2、访问指针数组的元素

  array := [5]*int{0: new(int), 1: new(int)}

  *array[0] = 10

  *array[1] = 20

3、数组的长度是数组类型的一个组成部分,同一类型的数组才可以用”==”相互比较。

 a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{1, 3}
fmt.Println(a == b, a == c, b == c) //"true false false"
d := [3]int{1, 2}
fmt.Println(a == d) //compile error: cannot compare [2]int == [3]int

3.1.3 在函数间传递数组

  在函数之间传递变量时,总是以值的方式传递的。如果这个变量是个数组,意味着整个数组都会完整的复制,并传递给函数。这就意味着对数组参数的任何修改都是发生在复制的数组上,并不能直接修改调用时原始的数组变量。

1、使用值传递,在函数间传递大数组
  每次foo被调用时,必须在栈上分配8M的内存,之后整个数组的值被复制到刚分配的内存里。

//声明一个8M大小的数组
var array [1e6]int
func foo(array [1e16]int) {
    ...
}
foo(arry) //将数组传递给函数foo

2、使用指针在函数间传递大数组
  将数组的地址传入函数,只要在栈上分配4字节的内存给指针就可以。由于传递的是指针,所以如果改变指针指向的值,就会改变共享的内存。

var array [1e6]int

func foo(array *[1e16]int) {

      ...
 }
 foo(&arry) //将数组的地址传递给函数foo

Go数据类型之复合数据类型--数组的更多相关文章

  1. Go数据类型之复合数据类型--Slice

    3.2 Slice 一个slice是一个轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能,而且slice的底层确实引用一个数组对象. 一个slice由三个部分构成:指针.长度和容量.指针指 ...

  2. ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

    这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  3. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  4. C/C++知识总结 五 复合数据类型 壹(数组、字符串与string、结构)

    C/C++复合数据类型 壹(数组.结构) 数组 数组的意义.定义与创建 一.二维数组应用 字符数组与字符串处理函数 数组与指针---关系密切 数组的意义与定义创建 意义:反映数据间的特点(通过把同一类 ...

  5. Go语言入门篇-复合数据类型

    复合数据类型 主要讨论四种类型——数组.slice.map和结构体 数组和结构体聚合类型   --数组和结构体都是有固定内存大小的数据结构 --数组:由同构的元素组成——每个数组元素都是完全相同的类型 ...

  6. Chisel3 - 复合数据类型

    https://mp.weixin.qq.com/s/rXYqiZKuBpAYL8R94zxgRA   Chisel允许用户根据需要,把基本数据类型组合成为复合数据类型使用.如C语言里面的结构体,这样 ...

  7. 【Oracle】Oracle中复合数据类型

    1,常见的操作数据库的技术有那些 jdbc     使用java 访问数据库的技术    PLSQL  (procedure  过程化sql) 在数据库内部操作数据的技术    proc/c++    ...

  8. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  9. Perl 数据类型:标量、数组、哈希

    Perl 数据类型Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型. Perl 有三个基本的数据类型:标量.数组.哈希.以下是这三种数据类型的说明: 序 ...

随机推荐

  1. asp.net core mvc 读取appsettings.config中文乱码问题

    asp.net core mvc 读取appsettings.config中文乱码问题的解决方法如下: 用记事本打开appsettings.config,另存为的时候,编码设置为 “UTF-8”,

  2. MSYS2 常见操作

    博客转自:http://www.cnblogs.com/vincenzo/archive/2010/05/13/1734230.html 和 https://blog.csdn.net/langres ...

  3. [LeetCode] 495. Teemo Attacking 提莫攻击

    In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...

  4. MySQL之表日志管理

    MySQL日志管理 mysql日志(默认存放在datadir): 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志, ...

  5. consul删除无效实例

    consul删除无效实例删除无效服务删除无效节点删除无效服务http://127.0.0.1:8500/v1/agent/service/deregister/test-9c14fa595ddfb8f ...

  6. 在使用FPGA来控制DDR3/DDR2 IP 的时候两个错误的解决办法

    对于熟悉Intel FPGA的老(gong)司(cheng)机(shi)来说,外部存储器的控制早已是轻车熟路,但是对于新手,DDR3/DDR2 的IP使用也许并没有那么简单,不过没关系,骏龙的培训网站 ...

  7. tablespace表空间

    tablespace——表空间,便于理解,把oracle数据库看作一个实在房间,表空间可以看作这个房间的空间,是可以自由分配,在这空间里面可以堆放多个箱子(箱子可以看作数据库文件),箱子里面再装物件( ...

  8. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  9. centos jira wiki 开机自启

    启动jira 和 wiki 需要java环境变量 操作步骤: 在 /etc/rc.d/rc.local 文件中[ 注意要有可执行权限 ] export JAVA_HOME=xxxxxxxx expor ...

  10. quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0

    quartz2.3.0系列目录 官网下载地址:http://www.quartz-scheduler.org/downloads/ 本系列demo全部来源于官网,仅仅是简化和汉化了注释!一部分代码de ...