![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go专家编程
文章平均质量分 55
sandyznb
这个作者很懒,什么都没留下…
展开
-
Go专家编程 timer、ticker
golang中timer和ticker 都属于time包timer是一次性定时器,执行完一次就结束了,ticker是周期性定时器,周而复始的执行。二者在数据结构上完全一样,都是一个对外的channel + 对内的runtimeTimer。type Timer struct { C <-chan Time r runtimeTimer}type Ticker struct { C <-chan Time // The channel on which the原创 2022-03-11 17:53:57 · 1182 阅读 · 0 评论 -
Go专家编程 反射
interface类型是有一个type和value的概念的,反射就是获取type和value的手段。go恰恰提供了这个功能。反射三定律:1:可以将interface变量转换成反射对象。var x float64 = 3.4t := reflect.TypeOf(x) //t is reflect.Typefmt.Println("type:", t)v := reflect.ValueOf(x) //v is reflect.Valuefmt.Println("value:", v原创 2022-03-10 11:55:03 · 167 阅读 · 0 评论 -
Go专家编程 mutex、rwmutex篇
互斥锁、Lock()、UnLock(),使用简单但是内部设计很巧妙一:数据结构type Mutex struct { state int32 sema uint32}locked:0/1 表示当前锁的状态。woken:是否有协程被唤醒,0没有1有。starving:是否饥饿状态。处于饥饿状态时 就不会自旋waiter:具体数字,表示阻塞等待锁的个数。协程解锁时根据这个来决定是否释放信号量二:自旋三:rwmutex读写互斥锁,mutex的升原创 2022-03-09 16:02:10 · 219 阅读 · 0 评论 -
Go专家编程 range篇
range用来遍历 数组、slice、map、channel,使用非常频繁一:可优化的地方func RangeSlice(slice []int) { for index, value := range slice { _, _ = index, value }}func RangeMap(myMap map[int]string) { for key, _ := range myMap { _, _ = key, myMap[key]原创 2022-03-09 15:27:27 · 223 阅读 · 0 评论 -
Go专家编程 select--case篇
select是golang在语言层面提供的IO多路复用机制,可以检测多个channel是否ready(可读、可写),相比较操作系统层面的IO多路复用还是方便很多。与select 配合使用的是case和default,default是一种特殊的case。一:case的数据结构type scase struct { c *hchan // chan kind uint16 elem unsafe.Pointer原创 2022-03-09 15:02:34 · 1624 阅读 · 0 评论 -
Go专家编程 defer篇
一:defer规则:1:延迟函数的参数在defer语句出现时就已经确定下来了2:延迟函数执行按后进先出顺序执行,即先出现的defer最后执行3:延迟函数可能操作主函数的具名返回值二:returnreturn不是原子操作,return i具体执行过程,1给返回值赋值(若有),2执行defer(若有),3执行跳转三:derfer实现原理type _defer struct { sp uintptr //函数栈指针 pc uintptr /原创 2022-03-09 11:47:22 · 204 阅读 · 0 评论 -
Go专家编程 map篇
详细参考Golang map分析_zhangdell的专栏-CSDN博客无序的基于key----value的结构map是引用类型,必须初始化才能使用。var m2 map[string]string//未初始化fmt.Printf("main11111m2 outer address=%p, m=%p,m=%v \n", &m2,m2,m2)//main11111m2 outer address=0xc00008c020, m=0x0,m=map[]从map的内部结构可知..原创 2022-03-09 11:13:23 · 294 阅读 · 0 评论 -
Go专家编程 slice篇
书上给了一道题package mainimport ( "fmt")func AddElement(slice []int, e int) []int { return append(slice, e)}func main() { var slice []int slice = append(slice, 1, 2, 3) newSlice := AddElement(slice, 4) fmt.Println(&slice[0]原创 2022-03-08 18:24:32 · 215 阅读 · 0 评论