
go
文章平均质量分 88
语言学习
迪崽~
I do what I love.
展开
-
golang的 data race 分析
golang的data race一、名词解析1、data race: Any race is a bug定义: ①多个线程(协程)对于同一个变量、②同时地、③进行读/写操作、并且④至少有一个线程进行写操作。(也就是说,如果所有线程都是只进行读操作,那么将不构成数据争用)后果: 如果发生了数据争用,读取该变量时得到的值将变得不可知(根据内存模型),使得该多线程程序的运行结果将完全不可预测,有一定可能会导致直接崩溃。如何防止: 对于有可能被多个线程同时访问的变量使用排他访问控制,具体方法包括使用原创 2021-12-25 11:39:20 · 3286 阅读 · 1 评论 -
golang 多返回值和channel的底层原理
golang 返回值和c的底层区别1、栈帧栈帧结构的两端由两个指针来指定。寄存器ebp通常用做帧指针(frame pointer),而esp则用作栈指针(stack pointer)。在函数执行过程中,栈指针esp会随着数据的入栈和出栈而移动,因此函数中对大部分数据的访问都基于帧指针ebp进行。esp和ebp: esp是栈指针,是cpu机制决定的,push、pop指令会自动调整esp的值;ebp只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp原创 2021-08-03 23:33:56 · 1645 阅读 · 0 评论 -
Golang chan的任务分发和优雅退出
一、利用chan实现并发协程优雅的退出1、使用一个专门的退出通道,接收退出的信号。 当启动了多个worker工作协程时,只要main()执行关闭退出通道,每一个worker都会都到信号,进而关闭。func worker(stopCh <-chan struct{}) { go func() { defer fmt.Println("worker exit") // Using stop channel explicit exit for {原创 2021-01-25 12:54:07 · 3106 阅读 · 0 评论 -
K8S中Golang的编程技巧
一、K8S层级函数接口风格:函数的链式调用k8s对象有层级关系的逻辑,一般一个接口有一个同名(首字母小写)的实现对象。函数返回接口不返回具体的类型主要是更关心对象需对外暴露的接口不关心对象的内部构造。函数调用形式为链式调用。// 创建pod informerpodInformer := informerFactory.Core().V1().Pods().Informer()//内部接口// 代码源自client-go/informers/factory.gofunc (f *sharedIn原创 2021-01-24 00:11:54 · 977 阅读 · 0 评论 -
golang 闭包函数的应用技巧
一、有名函数和匿名函数函数变量类型初始值为nil。函数字面量类型的语法表达格式是 func (InputTypeList) OutputTypeList//无参函数func fun() { }var f func()//无入参无返回值的函数对象声明,初始值为nilf = fun//有参函数type FT func(int)func Fa(int){}func Test(FT){}Test(Fa) //pass function as parameter“有名函数”和“匿名函数(原创 2021-01-21 23:18:04 · 1679 阅读 · 0 评论 -
Golang 单元测试框架的使用
一、使用gomonkey stub(打桩)在测试包中创建一个模拟方法,用于替换生成代码中的方法。1、stub函数gomonkey.ApplyFunc(target,double)其中target是被mock的目标函数,double是用户重写的函数。注意点:重写的函数要和原函数入参和出参保持一致,否则会报错。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kBbERSS-1610705120202)(C:\Users\darrendyang\Desktop\mock1.原创 2021-01-15 18:05:51 · 4130 阅读 · 0 评论 -
golang 类型的初始化和寻址问题
一、类型初始化1、基本数据类型2、函数类型:初始值为nilvar test func() //初始值为nil函数字面量类型的语法表达格式是 func (InputTypeList) OutputTypeList, “有名函数”和“匿名函数(没有函数名类似闭包)”的类型都属于函数字面量类型,有名函数的定义相当于初始化一个函数字面量类型后将其赋值给一个函数名变量,“匿名函数”的定义也是直接初始化一个函数字面量类型,只是没有绑定到一个具体函数名变量上。从 Go 类型系统的角度来看,“有名函数”和“匿原创 2020-08-05 23:49:00 · 1465 阅读 · 0 评论 -
golang 接口和方法探讨
golang 接口和方法探讨一、简介方法: Go语言里有两种类型的接收者:值接收者和指针接收者。使用值类型接收者定义的方法,在调用的时候,使用的其实是值接收者的一个副本,所以对该值的任何操作,不会影响原来的类型变量。如果我们使用一个指针作为接收者,那么就会其作用了,因为指针接收者传递的是一个指向原值指针的副本,指针的副本,指向的还是原来类型的值,所以修改时,同时也会影响原来类型变量的值。 我们在调用指针接收者方法的时候,使用的也可以是一个值的变量,这样也是可以的。如果我们没有这么强制使用指针进行调原创 2020-08-05 19:05:56 · 415 阅读 · 0 评论 -
goroutine的调度分析
goroutineG: 表示goroutine,存储了goroutine的执行stack信息、goroutine状态以及goroutine的任务函数等;另外G对象是可以重用的。type g struct { stack stack //执行栈 sched gobuf //用于保存执行现场 goid int64 //唯一序号 gopc uintptr //调用者PC/IP start uintptr //任务函数}P: 表示逻辑processor,P的数量决定了系统内原创 2020-05-10 13:07:46 · 765 阅读 · 1 评论 -
go 源码分析string、[]byte的相互转换
string简单的来说字符串是一系列8位字节的集合,通常但不一定代表UTF-8编码的文本。字符串可以为空,但不能为nil。而且字符串的值是不能改变的。不同的语言字符串有不同的实现,在go的源码中src/runtime/string.gostring的定义如下:// string is the set of all strings of 8-bit bytes, conventionall...原创 2020-03-26 15:52:38 · 401 阅读 · 0 评论 -
go源码分析json的序列化与反序列化
json的数据类型Gojsonboolbool浮点数/整数常规数字string(utf-8)string(Unicode)array/slicearray[]bytestring(Base64)structJSON对象map[string]TJSON对象string简单的来说字符串是一系列8位字节的集合,通常但不一定代...原创 2020-03-26 12:23:32 · 806 阅读 · 0 评论 -
Golang - 业务模块如何优雅的操作数据库并且绑定restful请求
Dao层操作数据库DAO层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查。DAO层一定是和数据库的某几张表一一对应的,其中封装了增删改查基本操作,只做原子操作,增删改查。实现: 一般在dao层声明一个数据表的结构体,然后在dao层中实现对数据表的增删改查的操作接口。示例://user_dao.go...原创 2020-03-14 17:54:21 · 1669 阅读 · 0 评论 -
go GC垃圾回收
GC介绍:GO创建对象会给他分配内存资源,如果这个对象不使用了,而这个内存资源却一直被占用的话,那么我们的电脑很快就会被放满,所以需要将这些垃圾对象进行回收。什么才是垃圾 : 要回收,那么我们必须知道什么才是垃圾,什么不是垃圾。在我们看来,一个对象以后都不用了,就是垃圾。在程序看来,一个对象没有被引用了,就是垃圾。GC的流程:首先说明一下,下面说的停,都是STW,stop the wor...转载 2020-03-13 23:48:52 · 166 阅读 · 0 评论 -
Golang - restful-url的接口注册处理
一、注册 /根请求转到rootHandle,在rootHandle中为不同的url查找对应的处理接口并执行。1、tars业务端配置restful url与处理函数,指定url与对应的处理函数。 type TarsHttpMux struct { http.ServeMux cfg *TarsHttpConf } mux := &ta...原创 2020-03-13 21:20:36 · 654 阅读 · 0 评论 -
go 面向对象的处理方式
go语言特性Golang语言没有C++、JAVA一样有面向对象(封装、继承、多态)相关的概念,但是面向对象只是一种编程思想,go借助于struct、interface这两个go的数据类型可以实现面向对象的处理。Golang里面有组合的概念,也就是一个struct 里面可以包含一个或者多个struct,struct可以近似理解为面向对象编程中的class,但是不能等同,有很多区别。如果一个st...原创 2020-03-12 22:13:49 · 239 阅读 · 0 评论 -
Golang 反射和接口类型判断
A原创 2019-12-06 19:12:07 · 3790 阅读 · 0 评论 -
gorm操作数据库
gorm官方学习链接:https://books.studygolang.com/gorm/crud.html操作总结func (deploy *DeploymentConf) Get(application, server, instance string) error { err := DB.Table(DEPLOYTABLENAME).Where(map[string]interfac...原创 2019-11-24 13:42:46 · 865 阅读 · 0 评论