Golang
文章平均质量分 54
NayelyAA
我想上红名
展开
-
go.opentelemetry.io/otel/trace ../pkg/mod/go.opentelemetry.io/otel/[email protected]/config.go:117:2: du
go build编译失败,报错如下:go.opentelemetry.io/otel/trace../pkg/mod/go.opentelemetry.io/otel/[email protected]/config.go:117:2: duplicate method privatenote: module requires Go 1.14devcloud中的go版本是1.13,升级到1.14就可以了。确认下自己的go版本:go version删除下之前安装go的版本目录 sudo rm -rf原创 2021-07-08 11:37:52 · 900 阅读 · 0 评论 -
Go Extension:内存管理の栈内存管理
Go Extension:内存管理の栈内存管理 程序在运行期间可以主动从堆区申请内存空间,这些内存是由内存分配器分配,然后由垃圾回收器回收。每个goroutine都需要自己的栈空间,用来存放函数/局部变量等信息,栈区的内存管理是由编译器完成的。 内存分配器和垃圾收集器主要是围绕堆内存的申请和释放过程,这篇文章会介绍下go栈内存的实现原理,这样go的内存管理就完满了。1.设计原理 栈区一般存放着函数的入参和局部变量,这些参数的特点就是和函数的生命周期同步,在程序中不会长时间的存在,栈区的内存管理原创 2020-10-13 11:04:07 · 383 阅读 · 0 评论 -
Go Extension:内存管理の垃圾收集器
Go Extension:内存管理の垃圾收集器 用户会通过内存分配器在堆上申请内存,而垃圾收集器负责回收堆上的内存空间,内存分配器和垃圾收集器共同管理着程序中的堆内存空间。 Golang的垃圾回收机制从最初的标记-清除算法(需要大量的STW时间),到V1.5实现了三色标记并发垃圾收集器,大幅度降低收集延迟。Golang为了实现高性能的并发垃圾收集,经过多版本的迭代,目前将垃圾收集的暂停时间优化到了毫秒级以下。这篇文章主要是围绕GC中几个重要的概念介绍了Go垃圾收集器的设计思路,梳理了go版本更迭中在原创 2020-10-13 11:02:29 · 221 阅读 · 0 评论 -
Go Extension:内存管理の内存分配器
Go Extension:内存管理の内存分配器 Go是一种静态类型的编译语言,因此它并不需要VM。那么GC、调度和并发之类的功能是如何实现的呢?实际上,Go的应用程序二进制文件中嵌入了一个小型运行时(Go runtime)。 内存空间包含两个重要区域,一个是栈区还有一个是堆区。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存是由编译器管理的。 Go的内存管理包括在需要内存时自动分配内存,不需要时进行垃圾回收。这些工作都是由运行时完成。1.Go的内部内存结构 Go runti原创 2020-10-13 10:58:12 · 339 阅读 · 0 评论 -
《GO语言圣经》读书笔记(十二):底层编程
文章目录unsafe.Sizeof,Alignof和Offsetofunsafe.Sizeof():返回操作数在内存中的字节大小unsafe.Alignof():返回对应参数的类型需要对齐的倍数unsafe.Offsetof():返回对应参数的偏移量unsafe.Pointer小结unsafe.Sizeof,Alignof和Offsetofunsafe.Sizeof():返回操作数在内存中的字节大小 unsafe.Sizeof()函数返回操作数在内存中的字节大小,参数可以是任意类型的表达式,但是不会原创 2020-06-29 20:22:10 · 277 阅读 · 0 评论 -
《GO语言圣经》读书笔记(十一):反射
文章目录变量的内在机制为什么需要反射reflect包Type和ValueTypeOftype name和type kindValueOf通过反射获取值通过反射设置值isNil()和isValid()isNil()isValid()举个例子结构体反射与结构体相关的方法反射三大定律第一条定律第二条定律第三条定律为什么我们吐槽反射太慢进击的反射小结本节读书笔记对应原书第十二章。变量的内在机制 Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。原创 2020-06-28 16:54:55 · 246 阅读 · 0 评论 -
《GO语言圣经》读书笔记(九):包
文章目录包声明和导入声明包的匿名导入题外话:为什么go语言的编译速度如此之快?本节读书笔记对应原书第十章。 我们通过将一组相关的特性放到同一个包中,便于理解和后期更新,每个包更新的同时保持和程序中其他包的相对对立性,每个包都可以被其他的不同项目使用。 这么多的包,我们给他们定义不同的名字,用于区分和标识访问。 每个包还通过控制包内名字的可见性和是否导出来实现封装的特性,限制包内变量的可见性(有点类似于Java的private),用户必须通过特定的函数访问和更新变量(类似于Java通过get原创 2020-06-28 16:53:02 · 154 阅读 · 0 评论 -
《GO语言圣经》读书笔记(八):基于共享变量的并发
文章目录竞争条件解决数据竞争的三种方式互斥锁读写互斥锁sync.WaitGroupsync.Once加载配置文件示例并发安全的单例模式sync.Map原子操作atomic包示例内存同步goroutine与线程可增长的栈goroutine调度GOMAXPROCS本节读书笔记对应原书第九章。竞争条件 只有一个goroutine的程序中,程序的执行顺序和程序的逻辑有关系,按照既定的顺序去执行代码,如果多个goroutine中,我们是无法确定位于两个goroutine的x和y事件的先后顺序,这也说明了x原创 2020-06-28 16:51:41 · 253 阅读 · 0 评论 -
《GO语言圣经》读书笔记(七):Goroutines和Channels
文章目录使用goroutine启动单个goroutine启动多个goroutinechannelchannel类型创建channelchannel操作发送接收关闭无缓冲的通道有缓冲的通道判断通道是否关闭的两种方法单向通道通道总结worker pool(goroutine池)select多路复用写在前面:本节读书笔记对应原书第八章。 Go中的并发程序可以用两种手段来实现,第八章主要是围绕goroutine和channel展开讲的,他们都支持顺序通信进程(CSP)。CSP是一种现代的并发编程模型,原创 2020-06-28 16:50:49 · 189 阅读 · 0 评论 -
《GO语言圣经》读书笔记(六):接口
文章目录接口类型一个类型持有一个方法?本节读书笔记对应原书第七章。 接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型(比如数字类型,我们知道可以进行算术操作)不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,接口不会暴露出它所代表代表对象的内部结构以及该对象的方法,所以我们不知道接口是什么,但是我们知道可以通过它提供的方法做什么。 以下就是一个使用接口的例子,fmt.Printf()会把结果写到标准输出,该函数使用了另一个函数fmt.原创 2020-06-28 16:49:59 · 112 阅读 · 0 评论 -
《GO语言圣经》读书笔记(五):方法
文章目录6.1方法声明6.2 基于指针对象的方法6.3 通过嵌入结构体来扩展类型6.4 方法值和方法表达式本节读书笔记对应原书第六章。6.1方法声明 在函数声明时,在其名字之前放上一个变量,就是一个方法。package geometryimport "math"type Point struct{X,Y float64}func (p Point)Distance(q Point) float64{ return math.Hypot(q.X-p.X,q.Y-p.Y)}原创 2020-06-28 16:48:46 · 104 阅读 · 0 评论 -
《GO语言圣经》读书笔记(四):函数
文章目录5.1 函数声明5.2 错误5.3 函数值5.4 Deferred、Panic和Recover5.1 函数声明 函数声明包括函数名、 形式参数列表、 返回值列表( 可省略) 以及函数体。 下面提供了一个函数声明的模板。func name(parameter-list) (result-list) { body} 大概知道模板是啥样的了,就要如法炮制,写出了一个真正的函数,函数hypot做的事情就是求直接三角形的斜边是多少:func hypot(x, y float64) fl原创 2020-06-28 16:47:25 · 111 阅读 · 0 评论 -
《GO语言圣经》读书笔记(三):复合数据类型
ch4:复合数据类型 数组和结构体都是有固定内存大小的数据结构,而对于切片slice和map来说,它们是动态的数据结构,它们可以根据需要进行动态增长。4.1 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。不过Go中很少使用数组,因为数组无法根据需要进行动态扩展,我们常使用切片slice代替数组的使用。 Go中的数组和其他语言中的数组有很多共通的地方,下面来总结和回顾一下:数组中的每个元素可以通过索引下标来访问,如果数组的长度用变量len表示,那么索原创 2020-06-28 16:46:31 · 413 阅读 · 0 评论 -
《GO语言圣经》读书笔记(二):基础数据类型
文章目录基本数据类型整型特殊整型数字字面量语法(Number literals syntax)浮点型复数布尔值字符串字符串转义符多行字符串字符串的常用操作byte和rune类型修改字符串类型转换运算符算数运算符关系运算符逻辑运算符位运算符赋值运算符常量iota几个常见的`iota`示例: Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。基本数据类型整型 整型分为以下两个大原创 2020-06-28 16:45:39 · 199 阅读 · 0 评论 -
《GO语言圣经》读书笔记(一):程序结构
文章目录标识符与关键字标识符关键字变量变量的来历变量类型变量声明标准声明批量声明变量的初始化类型推导短变量声明匿名变量指针new函数变量的生命周期类型包的初始化if else(分支结构)if条件判断基本写法if条件判断特殊写法for(循环结构)无限循环for range(键值循环)switch casegoto(跳转到指定标签)break(跳出循环)continue(继续下次循环) 变量和常量是编程中必不可少的部分,也是很好理解的一部分。标识符与关键字标识符 Go中的变量名、常量名、函数名都遵循原创 2020-06-28 16:43:33 · 191 阅读 · 0 评论 -
Golang不完全の笔记(一):反射
文章目录reflect包TypeOftype name和type kindValueOf通过反射获取值通过反射设置变量的值函数反射结构体反射与结构体相关的方法StructField类型结构体反射示例反射在GORM中的运用为什么我们吐槽反射太慢小结 反射这个概念比较常见了,在其他语言中也有反射这个概念(不过还有的语言不支持),Java中利用反射可以创建某个对象对应类的实例、访问成员变量和调用方法、动态创建Array数组等。在go中我们可以利用反射主要可以解决以下几件事情:不知道函数的参数是什么,或者原创 2020-06-09 20:45:05 · 433 阅读 · 1 评论 -
Golang 的快速入门学习
Golang 的快速入门学习文章目录Golang 的快速入门学习一、Go语言结构关于包二、 Go语言数据类型三、Go 语言变量四、Go 语言常量五、Go 语言运算符六、Go 语言条件语句七、Go 语言循环八、Go 语言函数九、Go语言变量作用域十、Go 语言数组十一、Go语言指针十二、Go语言结构体十三、Go语言切片十四、Go语言范围十五、Go语言Map十六、Go 语言递归函数十七、Go语言类型转换十八、Go语言接口十九、Go 错误处理panic和recover以及defer二十、Go并发通道通道缓冲区原创 2020-05-31 16:24:05 · 869 阅读 · 0 评论