博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go 数组(array)、切片(slice)、map、结构体(struct)
阅读量:4942 次
发布时间:2019-06-11

本文共 2182 字,大约阅读时间需要 7 分钟。

一 数组(array)

  go语言中的数组是固定长度的。使用前必须指定数组长度。

  go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。

  声明:

var arrayName = [arraySize]dataType{xxx,xxx,xxx....}  //定义全局数组 例如:var b = [10]int{1,2,3,4,5,6,7,8,9,0}    var b = [10]int{1,2,3,4}                //不足自动补0
arr := [...]int{
1,2,3,4,5} //循环for _,i := range arr { fmt.Println(i) }

多维数组:

//初始化:var a = [3][4]int{[4]int{
1,2,3},[4]int{
1,2,3},[4]int{
1,2}} //不足补0
//创建数组声明changdu    var aaa1 = [5]int{
1,2,3,4} fmt.Println(aaa1) //创建数组不声明长度 var aaa2 = [...]int{
1111,2222,3333,4444,55555,6666} fmt.Println(aaa2) //创建数组并初始化其中部分 var aaa3 = [5]string{
1:"aaa",2:"bbb"} fmt.Println(aaa3)

 

切片(slice)

  指向底层数组的指针。不需要定义长度。和数组在写法上的区别就是不需要指定长度

  对比:

    v := [2]string{
"123","123"}  //数组    v := []string{
"123","123"}  //切片

 

  默念:数组有长度,切片没长度,数组有长度,切片没长度......

  如果多个slice指向同一个底层数组,其中一个改变了数组的值,则其他如果包括这个key的值也会改变

  如果slice增加时,导致数组超长,则会再次分配一个新的数组。其他slice可能就会指向这个新的底层数组,这个前一个改变了底层数组的值可能是第一个底层数组,所以第二个slice的key 指向的是第二个底层数组。这点有点混淆。来自无闻视频教程中讲解。

  方法:

    append(arr,1,2,3,4,5)  //将1,2,3,4,5追加到arr中    slice := arr[开始:结束]  //指向数组中开始到结束的    copy(arr1,arr2)     //用arr2中的值替代arr1中的值,通过key 对应的代替  copy(arr1[开始:结束],arr2[开始:结束]) 指定替换部位

 

map:

  是一个key=>value的hash结构

  key是除func、slice、map、array外的类型

  声明初始化  m := map[string]string{}

  赋值一个     m["key1"] = "val1"

  取值     v := m["key1"]

  删除一个值  d := delete(m,"key1")

  取值的时候可以返回两个值。另一个可以判断是否存在

  val,isset := m[2]

struct(结构体)

  个人理解:一种类型;

  例如:

    type person{

      Name string

      ages int

    }

    使用该类型需要定义该类型中两个属性

    

所有值传递不会改变内存中的值,只有引用类型该可以改变内存中的值

内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),第一个参数也是一个类型而不是一个值

func make(t Type,size IntegerType) Type

make slice

var slice_ []int = make([]int,5,10)fmt.Println(slice_)var slice_1 []int = make([]int,5)fmt.Println(slice_1)var slice_2 []int = []int{
1,2}fmt.Println(slice_2)打印结果:[0 0 0 0 0][0 0 0 0 0][1,2]

make map

var m_ map[string]int = make(map[string]int)m_["one"] = 1fmt.Println(m_)var m map[string]int = map[string]int{
"1":1}m["2"] = 2fmt.Println(m)打印结果:map[one:1]map[1:1 2:2]

mak channel

var c = make(chan bool)

 

转载于:https://www.cnblogs.com/jackylee92/p/6171897.html

你可能感兴趣的文章
LeetCode 860.柠檬水找零(C++)
查看>>
文件上传
查看>>
(Problem 92)Square digit chains
查看>>
HDU 2612 Find a way BFS,防止超时是关键
查看>>
0809
查看>>
FineUIPro v5.2.0已发布(jQuery升级,自定义图标,日期控件)
查看>>
HTML页和ashx之间关系的一点小应用
查看>>
智能合约安全前传-基础知识入门
查看>>
Myeclipse反编译插件
查看>>
Dubbo和Zookerper的关系
查看>>
centos 5 系统安装MYSQL5.7
查看>>
docker数据卷(转)
查看>>
地图定位及大头针设置
查看>>
oracle常用小知识点
查看>>
CATransform3D参数的意义
查看>>
怎么自己在Objective-C中创建代理
查看>>
Under Armour Drive 4 Performance Reviews
查看>>
C#操作目录和文件
查看>>
警惕数组的浅拷贝
查看>>
百度地图 导航
查看>>