Go mark自留

delve调试

dlv调试:https://www.jianshu.com/p/2802d71ab9e9
go mod init
dlv debug main.go

格式化

预览gofmt
修改gofmt -w

概念

高并发

执行

脚本执行 go run
编译执行:go build src后目录(默认在src内寻找(Gopath里执行
将exe放入bin:go build -o bin/cal 文件名
go build 出的exe均与执行go文件同名

调用包

import gopath/src下地址
会被外部调用的函数 首字母大写
_ 空白符,只导入做初始化,但不调用。
包的别名 import时在包·路径前写别名
包内如果含有init函数,则在main前执行 init->全局变量->main

值类型和引用类型

值(传值):基本数据类型、数组、struct (仅在子函数内拷贝,并未实现调用)
引用(传地址):指针 slice map chan
值只会拷贝传递 先拷贝 即把备份给调用的函数传参,所以改变的只有子函数里的值,对外界无影响。
所以如果要实现函数返回改变,用指针实现,将地址传入函数。(注意不是改备份的地址,需要改地址所指的内存值)
值类型取星号即为引用 如 *int

变量

仅在最小代码块内有效。优先局部变量,再全局。可能出现与全局变量名称相同的局部变量,注意是否是新定义的。
全局区域只能声明变量,不能执行代码 即可以 var a int = 100;但不可以 a:=100
类型不能直接赋值。

Switch

无break??!!!可以在case下写多条,往下走:fallthrough,不需匹配下一case即可执行。
无条件时,用case 判断:

Label

跳转标识 字符串:

函数

函数也是一种类型 可以赋值给变量,也可以直接使用。此变量为指针,指向函数 打印出来为地址
用type可进行自定义。函数不能比较。无论是值传递还是引用传递,都是拷贝。
return返回值只需在函数名处定义,可以return 空。如要忽略可以用下划线。
可变参数 func add(arg···int) int{} 零个或多个参数。arg(变量名)是一个slice,可通过arg[]依次访问所有参数。

defer

先进后出 函数返回时,执行defer,可用来进行资源清理。
在函数执行后再执行defer,但defer里的值在defer定义时即确定,与后续无关。
用途 :关闭文件句柄、锁资源释放、数据库连接释放。

rune

[]rune表示一个字符,无论中英文都只占1。byte中中文占3个字节,循环时可能出错(比如判断中文回文。

new/make

分配内存。分配值类型(int\struct,返回指针)/引用类型(chan map slice)

panic和recover

错误处理

append/copy

a = append(a,b…) 如越界会扩容
copy 不足时会补默认值0 超过则只复制前面

sort

不能传入数组,因为是值。sort改变后无法传出。如要数组排序,可以采用切片。a[:]
search的前提是有序

map

map[key]value。初始化需要make,声明时不分配内存。map的value可以是map。内部无序。如要有序输出,先处理key,然后遍历

线程遍历

互斥锁 var mu sync.Mutex (同一时间仅一个goroutine可进入)
(读)写锁 var mu sync.RWMutex (只读不需要加锁,读多写少则读写锁,效率更高)
go build -race 竞争检测
互斥:go 中各读写前后均需lock和unlock
读写:Rlock和RUnlock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值