GoLang基础数据类型--->数组详解

yinzhengjie · · 8012 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

                     GoLang基础数据类型--->数组详解

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

一.Golang数组简介  

 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。换句话说,与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。

    在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。

    更多关于Golang和C的数组区别可以点击这里:http://blog.csdn.net/wangkai_123456/article/details/72511037

 

二.定义数组

   在Go语言中,数组长度在定义后就不可更改,在声明时长度可以为一个常量或者一个常量表达式(常量表达式是指在编译期即可计算结果的表达式)。数组的长度是该数组类型的一个内置常量,可以用Go语言的内置函数len()来获取。

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:y1053419035@qq.com
 6 */
 7 
 8 package main
 9 
10 import (
11     "strings"
12     "fmt"
13     "reflect"
14 )
15 
16 func main() {
17     var   golang_array  [5]string //定义一个长度为5的字符串数组。我们可以用一个定义数组的公式:“var golang_array [n]type ”, n表示数组长度,type表示数组存储类型。
18     line := "yinzhengjie is a good boy"
19     list := strings.Split(line, " ")  //将字符串切割成相应的一个切片。
20     for k,v := range list{
21         golang_array[k] = v //将切片的每一个值赋值给我们刚刚定义的长度为5的数组。
22     }
23     fmt.Println(reflect.TypeOf(list)) //查看list的数据类型
24     fmt.Println(golang_array)
25     fmt.Println(reflect.TypeOf(golang_array)) 
26 }
27 
28 
29 
30 #以上代码执行结果如下:
31 []string
32 [yinzhengjie is a good boy]
33 [5]string

 

三.常见的数组声明方法

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:y1053419035@qq.com
 6 */
 7 
 8 package main
 9 
10 import "fmt"
11 
12 type  new struct {
13     x,y int64
14 }
15 
16 var (
17      Golang_bytes_array [10]byte   //声明长度为5的数组,每个元素为一个字节;
18      Golang_pointer_array  [5]*int //指针数组
19      Golang_two_dimensional_array  [2][3]int  //二维数组
20      Golang_three_dimensional_array [2][3][4]int //三维数组,等同于[2]([3]([4]int))
21      Golang_string_array   [5]string //字符串数组
22      Golang_dynamic_array = [...]int{1,2,3,4} //这种方法需要进行赋值操作。
23 )
24 
25 func main() {
26     fmt.Println(Golang_bytes_array)
27     fmt.Println(Golang_pointer_array)
28     fmt.Println(Golang_two_dimensional_array)
29     fmt.Println(Golang_three_dimensional_array)
30     fmt.Println(Golang_string_array)
31     fmt.Println(Golang_dynamic_array)
32 }
33 
34 
35 
36 #以上代码执行结果如下:
37 [0 0 0 0 0 0 0 0 0 0]
38 [<nil> <nil> <nil> <nil> <nil>]
39 [[0 0 0] [0 0 0]]
40 [[[0 0 0 0] [0 0 0 0] [0 0 0 0]] [[0 0 0 0] [0 0 0 0] [0 0 0 0]]]
41 [    ]
42 [1 2 3 4]

 

四.数组初始化

 1.二维数组初始化展示

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:y1053419035@qq.com
 6 */
 7 
 8 package main
 9 
10 import "fmt"
11 
12 func main() {
13     Golang_two_dimensional_array := [2][5]string{{"a","b"},{"c","d"}} //进行初始化,当然还可以这样写:Golang_two_dimensional_array := [...][5]string{{"a","b"},{"c","d"}}
14     res := Golang_two_dimensional_array
15     for _,v := range res    {
16         for x,y := range v{
17             fmt.Println(x,y)
18         }
19     }
20     fmt.Println(Golang_two_dimensional_array)
21 }
22 
23 
24 
25 
26 #以上代码执行结果如下:
27 0 a
28 1 b
29 2 
30 3 
31 4 
32 0 c
33 1 d
34 2 
35 3 
36 4 
37 [[a b   ] [c d   ]]

2.多维数组初始化展示

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:y1053419035@qq.com
 6 */
 7 
 8 package main
 9 
10 import (
11     "fmt"
12 )
13 
14 func main() {
15     Golang_Multidimensional_array := [...][3][10]string{   //该行效果等同于:"Golang_Multidimensional_array := [3][3][10]string",这不过我那样写可以动态扩展,没有把参数写死。
16         {
17             {
18                 "中华名族园","北京奥林匹克公园","国家体育馆","中国科学技术官","奥林匹克公园网球场","蟹岛绿色生态农庄","国家游泳中心(水立方)","中国紫檀博物馆","北京欢乐谷","元大都城",
19             },
20             {
21                 "北京野生动物园","男孩子麋鹿苑","中华文化园","留民营生态农场","中国印刷博物馆","北普陀影视城","大兴滨河森林公园","呀路古热带植物园","庞各庄万亩梨园","西黄垈村",
22             },
23             {
24                 "颐和园","北京大学","西山八大处","圆明园遗址公园","中央广播电视塔","北京植物园","紫竹院公园","凤凰岭","香山公园","王渊潭",
25             },
26         },
27         {
28             {
29                 "秦始皇兵马俑","大雁塔","大唐芙蓉园","华清池","黄巢堡国家森林公园","西安碑林博物馆","骊山国家森林公园","西安城墙","秦始皇陵","翠华山",
30             },
31             {
32                 "中坝大峡谷","香溪洞","安康双龙生态旅游度假区","瀛湖生态旅游景区","简车湾休闲景区","南宫山","天书峡景区","汉江燕翔洞景区","飞渡峡-黄安坝景区","千层河",
33             },
34             {
35                 "西柏坡红色旅游区","嶂石岩","天桂山","天山海世界","五岳塞","驼梁山","辛集国际皮革城","东方巨龟苑","白鹿温泉度假中心","灵寿秋山景区",
36             },
37         },
38         {
39             {
40                 //此处的字符串未填写,感兴趣的朋友可以继续写下去;
41             },
42             {
43                 //此处的字符串未填写,感兴趣的朋友可以继续写下去;
44             },
45             {
46                 //此处的字符串未填写,感兴趣的朋友可以继续写下去;
47             },
48         },
49     }
50 
51     fmt.Println(Golang_Multidimensional_array)
52 
53     for i:=0;i<50 ;i++  {
54         fmt.Print("*")
55     }
56     fmt.Print("我是分割线")
57     for i:=0;i<50 ;i++  {
58         fmt.Print("*")
59     }
60     fmt.Println()
61 
62     for k,v := range Golang_Multidimensional_array{
63         fmt.Println(k,v)
64         //for x,y := range v{
65         //    fmt.Println(x,y)
66         //}
67     }
68 }
69 
70 
71 
72 #以上代码执行结果如下:
73 [[[中华名族园 北京奥林匹克公园 国家体育馆 中国科学技术官 奥林匹克公园网球场 蟹岛绿色生态农庄 国家游泳中心(水立方) 中国紫檀博物馆 北京欢乐谷 元大都城] [北京野生动物园 男孩子麋鹿苑 中华文化园 留民营生态农场 中国印刷博物馆 北普陀影视城 大兴滨河森林公园 呀路古热带植物园 庞各庄万亩梨园 西黄垈村] [颐和园 北京大学 西山八大处 圆明园遗址公园 中央广播电视塔 北京植物园 紫竹院公园 凤凰岭 香山公园 王渊潭]] [[秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山] [中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河] [西柏坡红色旅游区 嶂石岩 天桂山 天山海世界 五岳塞 驼梁山 辛集国际皮革城 东方巨龟苑 白鹿温泉度假中心 灵寿秋山景区]] [[         ] [         ] [         ]]]
74 **************************************************我是分割线**************************************************
75 0 [[中华名族园 北京奥林匹克公园 国家体育馆 中国科学技术官 奥林匹克公园网球场 蟹岛绿色生态农庄 国家游泳中心(水立方) 中国紫檀博物馆 北京欢乐谷 元大都城] [北京野生动物园 男孩子麋鹿苑 中华文化园 留民营生态农场 中国印刷博物馆 北普陀影视城 大兴滨河森林公园 呀路古热带植物园 庞各庄万亩梨园 西黄垈村] [颐和园 北京大学 西山八大处 圆明园遗址公园 中央广播电视塔 北京植物园 紫竹院公园 凤凰岭 香山公园 王渊潭]]
76 1 [[秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山] [中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河] [西柏坡红色旅游区 嶂石岩 天桂山 天山海世界 五岳塞 驼梁山 辛集国际皮革城 东方巨龟苑 白鹿温泉度假中心 灵寿秋山景区]]
77 2 [[         ] [         ] [         ]]

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:yinzhengjie

查看原文:GoLang基础数据类型--->数组详解

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8012 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传