Go
2022-01-05
40
每个goroutine都维护一个自己的defer链表。
新注册的defer会被添加到链表头。
defer链表执行时,从链表头开始执行。所以表现出倒叙执行。
函数如果注册了defer函数,编译器会在代码底部插入deferreturn函数。
函数执行到deferreturn时,会根据defer结构体中的字段判断当前链表头的defer是不是自己注册的,是则执行并删除,反之,代表当前函数注册的defer已经执行完了,函数结束。
go1.12之前(含)使用上述方法执行defer,有一下几个问题:_defer结构体在
2022-01-05
27
源代码分析
sync.Once的源码很精简,但是有一行原子操作的代码却让我产生了疑惑。
在提出疑惑前,我们先分析下其实现的源代码。
我先添加一些基本的注释
// 去掉了源代码里面的注释
// Once is an object that will perform exactly one action.
type Once struct {done uint32m Mutex
}func (o *Once) Do(f func()) {// fast path, // o.done=0代表还没有执行过
2022-01-05
32
手撸golang 仿spring ioc/aop 之9 扫码4
缘起
最近阅读 [Spring Boot技术内幕: 架构设计与实现原理] (朱智胜 , 2020.6)
本系列笔记拟采用golang练习之
Talk is cheap, show me the code.
Spring
Spring的主要特性:
1. 控制反转(Inversion of Control, IoC)
2. 面向容器
3. 面向切面(AspectOriented Programming, AOP)源码gitee地址:
https:
2022-01-05
36
Go的日志工具之痛go生态一直没能有一个强势的日志工具,优秀的日志有zap,zerolog,但是API各有各的设计理念,自然是不兼容的
openlog和seclog的初衷倒退5年,go的日志工具更加不成熟,我们folk lager项目,进行安全整改后成为自己的项目https://github.com/go-chassis/seclog
然而他的老旧的API设计已经被我诟病很久。就是以f为结尾的函数调用openlogging.GetLogger().Debugf("shuffler %d %d", i,
2022-01-05
193
布尔值是以数学家George Boole命名
编程中使用布尔值进行比较或控制流程,布尔值表示与数学逻辑分支相关的真值。
计算机中布尔类型值常用于条件判断的逻辑,逻辑值只有两种分别为真和假。逻辑值
Golang中以bool类型声明布尔型数据,布尔型数据只有true和false两个常量值。逻辑值
描述true
真false
假布尔类型变量的默认值为falsevar flag bool
fmt.Printf("flag = %v, type = %T\n", flag, flag)//flag = false,
2022-01-05
40
格式化
Golang的fmt包中含有格式化I/O函数,类似于C语言中的printf和scanf。函数
描述fmt.Print
输出到控制台,不接受任何格式化操作。fmt.Println
输出到控制台并换行fmt.Printf
仅打印出格式化的字符串fmt.Sprintf
格式化并返回一个字符串而不带任何输出fmt.Fprintf
格式化并输出到io.Writer而非io.Stdout占位符普通占位符
描述%v
值的默认格式%+v
打印结构体时会添加字段名%#v
相应值的Golang语法表示%T
相应值类型
2022-01-05
26
本系列记录的是本人第二次学习go语言的经验,所以如果对于go一点都不了解的可以先去认真的过一遍go的基础,基础教程大家可以去看 https://github.com/rubyhan1314/Golang-100-Days,这个系列的基础是我在这个帖子的基础上总结或者摘录过来的1.1 什么是切片
Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使
2022-01-05
46
本系列记录的是本人第二次学习go语言的经验,所以如果对于go一点都不了解的可以先去认真的过一遍go的基础,基础教程大家可以去看 https://github.com/rubyhan1314/Golang-100-Days,这个系列的基础是我在这个帖子的基础上总结或者摘录过来的1.1 什么是Map
map是Go中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值。
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值 Map 是一