我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽。

定义数组

go语言定义数组的格式如下:

var a []int

var 数组名 [数组长度]数组每一项的类型

初始化数组时,要定义好数组的长度和数组值的类型。注意定义数组时,数组的长度数字应该是常量,如果使用变量来定义长度则会报错:

var l =
var a [l]int // 此时长度使用变量 l 来定义,会报错

同时,不同的数组长度和类型,导致最终的数组也是不同的类型:

var a []int
var b []int // a 和 b 是不同的类型

数组赋值时是用 {},这点也是我最不习惯的地方:

func main() {
var a []int
a = []int{,,}
fmt.Println(a) // [1 2 3]
}

注意打印的结果是中括号的,但是没有用 , 来隔开每一项。

上面是先定义再赋值的,有点繁琐,可以一步到位地简写:

func main() {
a := []int{,,}
fmt.Println(a)
}

有时,我们一开始不知道数组的长度应该是多少,此时可以这样定义数组:


func main() {
a := [...]int{1,2,3}
fmt.Println(a)
}
// 用 ... 来表示未知的数组长度

同时,我们在初始化数组时也可以指定对应下标的值:

func main() {
a := [...]int{:,:}
fmt.Println(a) // [0 0 10 0 0 12]
}

代码中在定义数组时,指定下标2位置上的值是10,下标5位置上的值是12,其余未指定值的默认为0

遍历数组

使用for 循环来遍历数组:

func main() {
a := [...]int{,,,,}
for i:=;i<;i++{
fmt.Println(a[i])
}
} // a[i] 是数组取值,格式:数组名[下标]

也可以使用 range 来遍历:

func main() {
a := [...]int{,,,,}
for _,v := range a{
fmt.Println(v)
}
} // _ 是占位,此位置本来是下标,此处不用下标所以用 _ 占位

二维数组

二维数组的定义如下:

func main() {
a:=[][]int{
[]int{,},
[]int{,},
[]int{,},
}
fmt.Println(a) // [[1 2] [3 4] [5 6]]
}

可以看到这样是比较繁琐的,其实可以简化为:

func main() {
a:=[][]int{
{,},
{,},
{,},
}
fmt.Println(a) // [[1 2] [3 4] [5 6]]
}

如果你细心你会发现,我在最后一项后面加上了逗号,这是因为go语言的格式限制,这样收起花括号就不用加逗号了:

func main() {
a:=[][]int{
{,},
{,},
{,}}
fmt.Println(a)
}

数组是值类型

没错,在go中数组是值类型,这与我之前接触到的一些动态语言可完全不一样。关于值类型和引用类型,我就不多说了。直接来看下例子吧:

package main

import "fmt"

func main() {
var a = []int{,,}
var b = a
a[] =
fmt.Printf("a:%v,b:%v",a,b) // a:[4 2 3],b:[1 2 3]
}

Go语言中的数组(九)的更多相关文章

  1. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  2. Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)

    the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  3. Go语言中底层数组和切片的关系以及数组扩容规则

    Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...

  4. C语言中动态分配数组

    如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老师说是不可以的.后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白.今天在逛 ...

  5. C语言中的数组和指针以及字符串

    数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 da ...

  6. 【转】C语言中动态分配数组

    原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...

  7. c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式

    char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...

  8. C语言中的数组与字符串

    1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...

  9. C语言中的数组的使用——混乱的内存管理

    在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...

随机推荐

  1. Java Web项目案例之---登录注册和增删改查(jsp+servlet)

    登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...

  2. css基础(浮动 清除f浮动)

    文档流(标准流) 1.元素自上而下,自左而右  2.块元素,独占一行,行内元素在一行上显示,碰到父级元素的边框换行   浮动left 浮动的框可以向左或是向右移动,直到它的边缘碰到包含框或是另个浮动框 ...

  3. css 元素的竖向百分比设定是相对于容器的高度吗?

    结论是,如果是height的话,是相对于容器高度,如果是padding-height,margin-height则是相对于容器的宽度. 举例说明: <!DOCTYPE html> < ...

  4. js第一次学习心得

    最近开始接触js,用的是阮一峰的菜鸟教程,相对来说我觉得是比较通俗易懂的,用了很多很小的例子去讲每一个很小的细节,但对于我这种因为即将到来的团队作业做准备的,也没有办法将每个细节都理解的清楚,主要的把 ...

  5. js监听某个元素高度变化来改变父级iframe的高度

    最近需要做一个iframe调用其他页面内容,这个iframe地址是可变化的,但是里面的内容高度不确定且里面内容高度可调整,所以需要通过监听iframe里面body的高度变化来调整iframe的高度. ...

  6. 【2】PRD文档介绍

    首先,我想说,题主是一个不严肃的人(严肃脸),所以每次干个啥事之前我都喜欢唠唠嗑,说说废话,沟通沟通感情,曾经以为自己将会成为一个幻想中的产品经理那般大展身手,作为非计算机专业出身的应届生,后来才发现 ...

  7. JvmOverloads kotlin(14)(转)

    在Kotlin中@JvmOverloads注解的作用就是:在有默认参数值的方法中使用@JvmOverloads注解,则Kotlin就会暴露多个重载方法.可能还是云里雾里,直接上代码,代码解释一切:如果 ...

  8. 码云上webide怎么提交

    修改后想提交,它会提示:“暂存文件后才能提交”, 我拿放大镜找遍了整个界面也没找到“暂存”按钮, 原来,文件旁边那个+号就是暂存,好歹鼠标方式去之后给个tip,服了. 点一下这个加号,提交按钮就可用了 ...

  9. JDBC插入数据,获取自增长值

    package com.loaderman.demo.c_auto; public class Dept { private int id; private String deptName; publ ...

  10. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_5 自定义类型转换器演示异常

    后端自动进行类型的转换.前端输入的年龄都是字符串的形式传递到后端. user的实体类  加一个Date日期类型格式的字段.生成get和set还有toString的方法 重新部署程序 日期用横线的方式 ...