博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言基础教程2
阅读量:5290 次
发布时间:2019-06-14

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

array

数组声明--var arr [10]int,array由[n]<type>定义。n表示数组大小,type表示数组类型

声明且初始化--arr := [3]int{1,2,3}或者不写大小var arr := [...]int{1,2,3}或者var arr =  [3]int{1,2,3},如果不写大小可以用三个点来表示,go会自动识别,var arr[3]int默认是初始化为0。

ps:记住:=和=之间的区别,如果是:=不需要var,如果是=需要var

二维数组初始化a := [2][2]int{ [2]int{1,2}, [2]int{3,4} },a := [2][2]int{ [...]int{1,2}, [...]int{3,4} },a := [2][2]int{ {1,2}, {3,4} }默认里面的类型就是int

 

数组同样是值类型的:将一个数组赋值给另一个数组,会复制所有的元素。尤其是当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。

 

slice

slice 与array 接近,但是在新的元素加入的时候可以增加长度。slice 总是指向底层的一个array。slice 是一个指向array 的指针,这是其与array 不同的地方;slice 是引用类型这意味着当赋值某个slice 到另外一个变量,两个引用会指向同一个array。例如,如果一个函数需要一个slice 参数,在其内对slice 元素的修改也会体现在函数调用者中,这和传递底层的array 指针类似。

slice 总是与一个固定长度的array 成对出现。其影响slice 的容量和长度

arr := [10]int{1,2,3}slice := arr[0:5]slice1 := append(slice,4,5,6)fmt.Printf("slice1 len:%d, slice1 cap:%d\n",len(slice1),cap(slice1)) fmt.Printf("slice len:%d, slice cap:%d\n",len(slice),cap(slice))fmt.Printf("arr[0]=%d,arr[1]=%d,arr[2]=%d,arr[3]=%d,arr[6]=%d\n",arr[0],arr[1],arr[2],arr[3],arr[6])

arr[6] = 5,说明slice和slice1都指向了arr。更改slice和slice1将更改arr。

函数append 向slice s 追加零值或其他x 值,并且返回追加后的新的、与s 有相同类型的slice。如果s 没有足够的容量存储追加的值,append 分配一个足够大的、新的slice 来存放原有slice 的元素和追加的值。因此,返回的slice 可能指向不同的底层array

也就是说当slice指向一个arr时,如果通过append增加slice的容量,如果增加的值的个数没有超过arr的长度,slice仍旧指向arr,如果超过了arr的长度,将分配一个新的slice来存放原来的slice。

make

可以通过make来创建一个长度为n的slice--sl := make([]int,6)

 

map

1 package main 2  3 import "fmt" 4  5 func main() { 6     monthdays := map[string]int{ 7     "Jan": 31, "Feb": 28, "Mar": 31,  8     "Apr": 30, "May": 31, "Jun": 30,  9     "Jul": 31, "Aug": 31, "Sep": 30, 10     "Oct": 31, "Nov": 30, "Dec": 31,   //<--逗号是必须的11     }   12 13     fmt.Printf("%d\n", monthdays["Dec"])14     year := 015     for month,days := range monthdays {16         fmt.Printf("month :%s\n",month)17         year += days18     }   19     fmt.Printf("Numbers of days in a year: %d\n", year)20     var value int 21     var ok bool22     value, ok = monthdays["Jan"] //value将取到值,而ok则判断值是否真的取到23     if ok == true {24         fmt.Printf("value %d exists in map\n",value)25     }   26 }

 

转载于:https://www.cnblogs.com/GODYCA/archive/2013/05/07/3065051.html

你可能感兴趣的文章
OnContextMenu事件(转)
查看>>
Comparación para 2019 Nueva Lonsdor K518S y K518ISE
查看>>
论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)
查看>>
从今天开始
查看>>
Attribute(特性)与AOP
查看>>
第三次作业
查看>>
Codeforces 962 /2错误 相间位置排列 堆模拟 X轴距离最小值 前向星点双连通分量求只存在在一个简单环中的边...
查看>>
Matrix快速幂 模板
查看>>
laravel command调用方法命令
查看>>
20162302 - 20162319 结对编程项目-四则运算(第一周)
查看>>
用python2和python3伪装浏览器爬取网页
查看>>
MySQL开启远程连接权限
查看>>
tomcat7.0.27的bio,nio.apr高级运行模式
查看>>
SAP HANA 三大特点
查看>>
C#预处理器命令
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
ccf 出现次数最多的数
查看>>
单例模式
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
HDUOJ ------1398
查看>>