Go 语言集合(Go中文读书笔记)

本文深入讲解了Go语言的基础概念,包括内建函数如len、cap等的用途,内存分配机制new与make的区别,以及slice、array和map的操作方法。特别介绍了slice的创建、复制和追加操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Go 语言中的内构函数,不需要任何引用

 

close new panic complex

closed make recover real

len append print image

cap copy println 

 

close 和closed 用于channel通信和关闭channel

 

len 和cap 可用于不同的类型 len用于返回字符串、slice和数组的长度。

 

new 用于内存分配

 

make 用于内建类型map、slice、channel的内存分配

 

copy 用于复制slice、append 用于追加slice 

 

panic 和recover 用于异常机制的处理。

 

print 和println 是底层打印函数。可以不引用fit包的qing'kuang'x情况下使用

 

complex real 和imag 全部用于处理复数。

 

 

Go集合 array 、slices 和map array 和 slices序列号都是从0开始的,所有计算也是如此。 

 

array 由[n]<type> 定义,n表示array的长度。而<tpye>希望存储的内容的类型。数组的类型和大小是不能改变的。数组同样是值类型的。讲一个数组复制给另一个数组会复制整个数组的所有的元素。尤其是在向另一个数组传递的时候,它会获得一个数组的副本,而不是这个数组的指针。

 

声明一个数组 var a[3]int 如果不使用零来初始化它 则用复合声明 a: = [3]int {1,2,3} 也可以简写为 a := […]{1,2,3}。go语言会自动统计元素的个数。所有的项目必须都指定。

 

当声明一个array时,你必须在方括弧内输入些内容。数字或者三个点(…)

 

slice 与array接近。但是在新的元素假如的时候可以增加长度。slice总是指向底层的一个array。slice是一个指向array的指针,这是一个不同array的地方。slice是引用类型的。这意味着当赋值某个slice到另一个变量。两个引用会指向同一个array。

 

sl := make([]int ,10)

创建一个保存10个元素的slice。需要注意的是底层的array和slice并无不同。slice总是与一个固定的长度array成对的出现。其影响slice的容量和长度。

 

给定一个array或者slice,一个新的slice通过a[I:J]的方式创建。这会创建一个新的slice。指向a。从序列号I开始结束在序号J之前。长度为J-I。

 

a := […]int{1,2,3,4,5} //定义一个array 序列号从0到4;

s1 := a[2:4]  //从序列号2至3创建slice,它包含3,4;

s2 := a[1:5]  //从序列号1至4创建slice,它包含2,3,4, 5;

s3 := a[:] //从序号0至3创建,这是a[0:4]的简化写法,得到1,2,3,4;

s4 := a[:4] //这个是a[0:4]的简化写法。

s5 := a[:]  //从slice s2创建slice,注意这个s5任然指向array a。

 

 

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

 

s0 := []int {0,0} 

 

s1 := append(s0,2)  //追加一个元素,s1 == []int{0,0,2};

 

s2 := append(s1,3,5,7)  //追加多个元素,s2 ==[]int{0,0,2,3,5,7} 

 

s3 := append(s2,s0…) //追加一个slice s3 = []int{0,0,2,3,5,7,0,0} 注意这三个点

 

函数copy从源slice scr复制元素到目标dot,并且返回复制的元素的个数。源和目标可能重叠。复制的数量是len(src)和len(dst)中最小的值。

 

var a = […]int{0,1,2,3,4,5,6,7}

 

var s = make([]int 6)

 

n1 := copy(s,a[0:]) // n1 == 6,s == []int{0,1,2,3,4,5}

 

n2 := copy(s,s[2:]) // n2 == 4,s == []int{2,3,4,5}

 

 

map 可以认为使用ige用字符串做索引的数组(在其简单的形势下)

 

monthdays := map[string]ing {

"Jan":31,"Feb":28,"Mar""31,

"Apr""30,"May":31,Jun:30, //注意结尾必须是逗号。

 

向map增加元素

 

monthdays["Oct"] = 31 //添加一个元素

monthdays["Feb"] = 29 闰年重写这个元素

 

 

检查这个元素是否存在

 

var value int 

 

var present bool 

 

value , présent = monthdays["Jan"] //如果存在,present则有值返回true

 

v,ok := monthdays["Jan"] //"逗号ok标准形式,go语言方式"

 

从map移除元素

monthdays["Mar"] = 0,false 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值