Go

Go

go语言 defer详解

40 0

每个goroutine都维护一个自己的defer链表。 新注册的defer会被添加到链表头。 defer链表执行时,从链表头开始执行。所以表现出倒叙执行。 函数如果注册了defer函数,编译器会在代码底部插入deferreturn函数。 函数执行到deferreturn时,会根据defer结构体中的字段判断当前链表头的defer是不是自己注册的,是则执行并删除,反之,代表当前函数注册的defer已经执行完了,函数结束。 go1.12之前(含)使用上述方法执行defer,有一下几个问题:_defer结构体在

Go

对golang sync.once 实现的思考

27 0

源代码分析 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代表还没有执行过

Go

手撸golang 仿spring ioc/aop 之9 扫码4

32 0

手撸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:

Go

难以遏制的人因差错 -Go 的日志工具之痛

36 0

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,

Go

Go bool

193 0

布尔值是以数学家George Boole命名 编程中使用布尔值进行比较或控制流程,布尔值表示与数学逻辑分支相关的真值。 计算机中布尔类型值常用于条件判断的逻辑,逻辑值只有两种分别为真和假。逻辑值 Golang中以bool类型声明布尔型数据,布尔型数据只有true和false两个常量值。逻辑值 描述true 真false 假布尔类型变量的默认值为falsevar flag bool fmt.Printf("flag = %v, type = %T\n", flag, flag)//flag = false,

Go

Go fmt

40 0

格式化 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 相应值类型

Go

go学习五·切片

26 0

本系列记录的是本人第二次学习go语言的经验,所以如果对于go一点都不了解的可以先去认真的过一遍go的基础,基础教程大家可以去看 https://github.com/rubyhan1314/Golang-100-Days,这个系列的基础是我在这个帖子的基础上总结或者摘录过来的1.1 什么是切片 Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使

Go

go学习六·集合(Map)

46 0

本系列记录的是本人第二次学习go语言的经验,所以如果对于go一点都不了解的可以先去认真的过一遍go的基础,基础教程大家可以去看 https://github.com/rubyhan1314/Golang-100-Days,这个系列的基础是我在这个帖子的基础上总结或者摘录过来的1.1 什么是Map map是Go中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值。 Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值 Map 是一