Go基础学习【2】
创始人
2024-02-06 22:04:48

文章目录

    • 一:数组
    • 二:map集合
    • 三:包
    • 四:结构体

一:数组

1.命名
var arrAge = [5]int{1,2,3,4,5}
var arrAge =[…]int{1,2,4,5,6}
var arrAge =[5]string{3:“sfd”,5:“asdf”}
2.传递
通过传递数组的指针 和 使用数组的切片 来防止数组传递给函数消耗的内存
3.切片

切片的定义;
make([]int,50,50)
new([100]int)[0:50]

切片是一个可变的数组,在 Go 代码中 切片比数组更常用。不可以将指针只想切片,因为切片本身就是一个指针了,使用make创建切片切片拥有长度和容量。
切片的长度是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

make([]int, len,cap)  //50表示长度,cap可写可不写  
new([100]int)[0:50]   //这两种方法表示IDE是一样的
var v [] int = make([]int,10,50) 等价于 v:make([]int,10,50)

第一种适用于 map 切片 和channel
第二种使用于 数组 结构体
切片依旧适用for range格式 来进行遍历
切片的复制和添加
添加的第一种方式:copy() copy(s1.s2) 将s2内容拷贝到s1中也可以作为添加来说
添加的第二种方式:append(s1,s2) 将s2添加到s1尾部
4、切片的应用
修改某个字符的时候,首先将其转化为byte类型,然后进行字符修改,然后在将其从字符转化为字符串

s := "hello"
c := []byte(s)
c[0] = 'c'
s2 := string(c) // s2 == "cello"

二:map集合

使用make来构造map,不要使用new,如果map中新增容量,那么容量会自动增加,但是还是提前标出容量为好

var map1 map[keytype]valuetype  //定义形式
var map1 map[string]int   //定义形式
赋值形式:一种是根据键定值
第二种形式如下:
noteFrequency := map[string]float32 {"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,"G0": 24.50, "A0": 27.50, "B0": 30.87, "A4": 440}

map类型的切片:

定义:
make([]map[string]int])

使用两层make,第一层make是定义切片,第二层make是定义map里的元素
map的排序:将键或者值拷贝到一个切片,可以借助切片中的sort方法来进行排序,然后使用for-range输出

三:包

1.上锁
线程占用问题,多个不同线程访问同一个变量的时候有顺序问题,可以通过对变量的上锁和解锁来防止资源竞争

func Update(info *Info) {info.mu.Lock() //上锁info.Str = // new value //赋值info.mu.Unlock() //解锁
}

还可以通过RWMutex锁:RLock() 同一时间内允许多个线程同时访问,但是只有一个线程能够进行写操作
2.自定义包
创建新包并引入时 注意的是首字母大写的变量名和函数才属于共有的,其他都是私有的

四:结构体

格式定义

type identifier struct{field1 type1field2 type2
}
type T  struct{a , b int}
var t * T  //变量t是指向T的一个指针
t:=new(T) //给t分配内存,并零值化内存

结构体的匿名字段:定义结构体时。只定义了类型,没有定义字段名

普通结构体:
type hello struct{name stinga int
}

匿名结构体:

type hello struct{int string
}

值类型的接收者和指针类型的接收者区别:
指针类型的接受者在改变之后,变量的值发生改变;而值类型的接收者在改变变量的值后,变量的值没有是不受影响的,只有go复制出来的副本受其影响
在需要改变值的时候或拷贝代价较大时候以及为了维持一致性,使用指针类型接收者
当嵌套字段名发生冲突的时候,为了避免冲突,需要具体到具体结构体和方法

user3.Address.CreateTime = "2000" //指定Address结构体中的CreateTime
user3.Email.CreateTime = "2000"   //指定Email结构体中的CreateTime

可以通过直接命名方式对结构体进行赋值:

d1 := &Dog{Feet: 4,Animal: &Animal{ //注意嵌套的是结构体指针name: "乐乐",},
}

详细查看:我的笔记链接
感谢观看

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...