• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语言基础教程2

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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 := 0
15     for month,days := range monthdays {
16         fmt.Printf("month :%s\n",month)
17         year += days
18     }   
19     fmt.Printf("Numbers of days in a year: %d\n", year)
20     var value int 
21     var ok bool
22     value, ok = monthdays["Jan"] //value将取到值,而ok则判断值是否真的取到
23     if ok == true {
24         fmt.Printf("value %d exists in map\n",value)
25     }   
26 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go基础库汇总发布时间:2022-07-10
下一篇:
go import第三方包报错时解决办法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap