Golang学习(三)

8、指针

区别于c++当中的指针 ,Go当中不能对指针进行偏移/运算,是一种安全指针

变量取地址 :&a
地址取值 : *a

关于 new 和 make :

func main() {
   
	var a *int
	*a = 100
	fmt.Println(*a)

	var b map[string]int
	b["沙河娜扎"] = 100
	fmt.Println(b)
}

对于普通的值类型,声明之后就会自动分配内存 ;但是这样的一些类型,声明变量之后,还没有对其分配内存,此时直接对其进行赋值,则会引发panic ,因此需要手动对其分配内存

func new(Type) *Type a = new(int) , new 函数只接受类型参数 ,返回对于类型的指针

func make(t Type, size …IntegerType) Type 只能用于slice ,map 与channel
slice 需要制定三个参数 ,map需要指定两个

new 与 make的关系:
1、二者都是用于分配内存的
2、make只能用于slice 、map 、 channel三种类型的内存分配,返回的是三种引用类型本身
3、new用于类型的内存分配,分配之后对应内存存储的是类型零值,返回值是类型指针

9、panic处理

defer 可以让语句在函数结束时 延迟执行
函数的其他语句全部执行完毕,再以此处理带有defer 的代码块
defer部分类似于 栈的处理

func main() { fmt.Println("start...") defer fmt.Println("1") defer fmt.Println("2") defer fmt.Println("3") fmt.Println("end...") // start... // end... // 3 // 2 // 1 }

在遇到代码块可能引发panic时,可以通过defer 与 recover 一起处理,让代码顺利执行

//defer必须与recover一起使用 //recover 必须写在可能引起panic的语句前面 func b() { defer func() { err := recover() if err != nil { fmt.Println(" func b err") } }() panic("panic in b") }

10、map

一种key-value的映射关系容器,底层实现为 散列表 hash ,是一种引用类型,必须初始化才可以赋值

make(map[KeyType]ValueType, [cap])

cap虽然不是必须的,但是理应在初始化时 为其指定一个容量 , map也支持在声明的时候填充元素

判断某一个key是否存在 :

value, ok := map[key]

通过for range对其进行遍历,delete(mapname , key) 按照键 对其进行删除

map内部的key存储顺序与 插入顺序无关 ,因此需要进行操作:

func main() {
   
	rand.Seed(time.Now().UnixNano()) //初始化随机数种子

	va
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值