golang学习
文章平均质量分 91
Go语言是谷歌2009发布的第二款开源编程语言。
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
cbmljs
这个作者很懒,什么都没留下…
展开
-
阅读 Go 源码,你需要了解这几个编译器指示
编译器接受注释形式的指示。比如我们常见的//go:xxx的形式出现在方法前面上方。为了将其与非指示注释区分开,编译器指示要求在注释开头和指示名称之间不需要空格。但是由于它们是注释,故而不了解指示约定或特定指示的工具可以像其他注释一样跳过指示。以// line或/ * line开头的行指示行指示有如下几种形式:为了被识别为行指示,注释必须以// line或/ * line开头,后跟一个空格,并且必须至少包含一个冒号。转载 2023-02-08 10:21:39 · 356 阅读 · 0 评论 -
Golang学习:生成文档和示例代码
类似与javadoc,go也可以自动生成doc文档。我们主要使用到的是godoc命令。原创 2023-02-06 16:54:47 · 1769 阅读 · 0 评论 -
Go 函数调用 ━ 栈和寄存器视角
Go 语言完全使用栈来传递参数和返回值并由调用者负责清栈,通过栈传递返回值使得Go函数能支持多返回值,调用者清栈则可以实现可变参数的函数.Go 使用值传递的模式传递参数,因此传递数组和结构体时,应该尽量使用指针作为参数来避免大量数据拷贝从而提升性能.Go 方法调用的时候是将接收者作为参数传递给了callee,接收者分值接收者和指针接收者.转载 2023-01-06 15:08:09 · 474 阅读 · 0 评论 -
深入 Go 语言 defer 实现原理
GO栈帧,汇编转载 2023-01-05 20:23:36 · 172 阅读 · 0 评论 -
interface接口--GO面向对象编程思想
go interface面向对象思想原创 2023-01-05 10:15:31 · 559 阅读 · 0 评论 -
深入 net/http:看一下 http.RoundTripper
Github 的 api 的某些部分需要对请求进行身份验证,有些则不需要。默认情况下,该库不处理身份验证,它使用默认的 HTTP 客户端,如果您需要能够访问 api 的经过身份验证的部分,您可以携带自己的 HTTP 客户端,例如。中总是相同的,并且考虑到 API 调用是有速率限制的,并且由于您的应用程序的高使用率,您几乎总是达到/超过限制。. 我们将创建一个只响应一个路由的服务器,然后创建一个连接到该服务器的客户端包。另一件需要注意的事情是,无论我们是否访问服务器,响应的主体都会保持不变。翻译 2022-11-24 19:15:30 · 427 阅读 · 0 评论 -
fission源码分析--fission调用http请求流程分析
fission源码分析原创 2022-11-11 14:28:32 · 849 阅读 · 0 评论 -
Protocol Buffers 学习小结
protocol buffer原创 2022-10-24 15:42:07 · 215 阅读 · 0 评论 -
gRPC 实操指南(golang)
grpc实例--golang转载 2022-10-24 14:26:44 · 3393 阅读 · 0 评论 -
Go 编程模式:k8s Visitor 模式
k8s visitor模式原创 2022-10-10 11:26:53 · 318 阅读 · 0 评论 -
kubernetes之client-go的Indexer
Indexer是client-go用来存储资源对象并自带索引功能的本地存储,Reflector从DeltaFIFO中将消费出来的资源对象存储至Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便地从本地存储中读取相应的资源对象数据,而无须每次都从远程Etcd集群中读取,这样可以减轻Kubernetes API Server和Etcd集群的压力。在介绍Indexer之前,先介绍一下ThreadSafeMap。ThreadSafeMap是实现并发安全的存储原创 2022-02-24 18:56:16 · 697 阅读 · 0 评论 -
kubernetes hpa源码分析
初始化文件位置:cmd/kube-controller-manager/app/controllermanager.gofunc NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc { ... controllers["horizontalpodautoscaling"] = startHPAController ...}HPA Controller和其他的Controller一样,...原创 2022-01-11 10:14:08 · 717 阅读 · 0 评论 -
golang interface内部结构的一个面试考点
关于interface的源码问题,这里举一个例子说明一下,代码如下package mainimport ( "fmt")type People interface { Show()}type Student struct{}func (stu *Student) Show() {}func live() People { var stu *Student ...原创 2019-12-03 17:41:44 · 693 阅读 · 0 评论 -
golang学习--关于defer的执行顺序
实例一、package mainimport ( "fmt")func main() { defer_call()}func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { ...原创 2019-12-03 17:18:16 · 2736 阅读 · 0 评论 -
Go 语言闭包详解
Go 语言闭包详解原文链接:Go 语言闭包详解前言Go 语言闭包详解什么是闭包?闭包是由函数和与其相关的引用环境组合而成的实体。下面就来通过几个例子来说明 Go 语言中的闭包以及由闭包引用产生的问题。函数变量(函数值)在说明闭包之前,先来了解一下什么是函数变量。在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量...转载 2019-12-02 17:56:39 · 572 阅读 · 0 评论 -
golang实现颜色的rgb值和十六进制值互相转换
给定一个颜色的rgb值如何转换成hex,反过来又如何转换?在本节,我们需要掌握基本的面向对象知识--如何给一个类型添加方法。还需要掌握strconv这个包写出结构体type RGB struct { red, green, blue int64}type HEX struct { str string}method现在我们就可以构建RGB的颜色对象和HEX的...原创 2019-03-06 20:42:42 · 4802 阅读 · 0 评论 -
CGO编程--c结构体转go变量
其实很简单,我们看下代码就一目了然:package main/*typedef struct { int err; int width; int height;} A;A x = {0, 1, 2};*/import "C"import ( "fmt")func CStructToGo() { var a C.A a = C.x var err, wid...原创 2019-02-28 16:29:22 · 5556 阅读 · 0 评论 -
使用go语言操作mysql数据库
1.下载并导入数据库驱动包官方不提供实现,先下载第三方的实现,点击这里查看各种各样的实现版本。这里选择了Go-MySQL-Driver这个实现。地址是:https://github.com/go-sql-driver/mysql/。然后按照里面的说明下载驱动包:$ go get github.com/go-sql-driver/mysql最后导入包即可:import "d...转载 2018-11-09 17:44:21 · 218 阅读 · 0 评论 -
使用Anonymous Structs将数据传递给GoLang中的模板
原文来自:http://julianyap.com/2013/09/23/using-anonymous-structs-to-pass-data-to-templates-in-golang.html与Django,Flask或Bottle等Python Web框架相似的一件事是将多个对象传递给视图。在Django中这样的东西很常见,其中具有多个对象的上下文字典被传递回模板以进行渲染:...翻译 2019-02-15 09:49:28 · 193 阅读 · 0 评论 -
简单理解GO CONTEXT机制
网上关于golang context的介绍很多,讲了一大堆,代码写的也很复杂,对于新手来说看的晕乎乎的,这里举个简单的例子来介绍下。直接上代码:package mainimport ( "context" "fmt" "time")func doWork(ctx context.Context, a int) { for { fmt.Println("loop %d",...原创 2019-02-14 15:36:12 · 230 阅读 · 2 评论 -
使用 pprof 和火焰图调试 golang 应用
原文转自:http://cizixs.com/2017/09/11/profiling-golang-program/什么是 Profiling?Profiling 这个词比较难翻译,一般译成画像。比如在案件侦破的时候会对嫌疑人做画像,从犯罪现场的种种证据,找到嫌疑人的各种特征,方便对嫌疑人进行排查;还有就是互联网公司会对用户信息做画像,通过了解用户各个属性(年龄、性别、消费能力等),方便...转载 2019-01-25 11:49:24 · 1598 阅读 · 0 评论 -
谈谈Go语言的字符串设计
『问题描述』那天有用户向我反馈在使用 GoJieba 的过程中发现内存泄露的Bug。 具体现象就是这个测试代码 test.go 跑着跑着内存一直增长。 刚开始以为是代码里面的C语言部分内存没有正确释放导致的, 查了很久一直没有找到问题所在。最后发现这个Bug非常白痴,是因为 C.CString 使用不当导致的。 在调用了 C.CString 之后需要手动释放内存。 这个Bug非常白痴,但是...转载 2019-01-24 16:29:50 · 346 阅读 · 0 评论 -
golang结构体匿名字段的妙用
先看一段简单的代码:package mainimport ( "fmt")type A struct { B m int}type B struct { n int}func (b *B) my_print() { fmt.Printf("print B.n=%d\n", b.n)}func main() { a := &A{B{2}, 3}...原创 2019-01-22 16:18:31 · 4482 阅读 · 1 评论 -
Golang send a chunked HTTP response
package mainimport ( "fmt" "log" "net/http" "time")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { flusher, ok := w.(http.Flusher) if !ok { panic...原创 2018-12-13 17:57:24 · 1938 阅读 · 0 评论 -
golang实现hmac_sha256加密
hmac是Hash-based Message Authentication Code的简写,就是指哈希消息认证码,包含有很多种哈希加密算法,sha256是其中一种。golang代码实现入戏:package mainimport ( "crypto/hmac" "crypto/sha256" "encoding/base64" "encoding/hex" "fmt")...原创 2018-12-13 17:03:07 · 17940 阅读 · 1 评论 -
golang实现权重轮询调度算法(Weighted Round-Robin Scheduling)
参考<<权重轮询调度算法(Weighted Round-Robin Scheduling)>>这篇文章写了一个golang版本的权重轮询调度算法,请大家指教,不多说了直接上代码:package mainimport ( "fmt" "time")var slaveDns = map[int]map[string]interface{}{ 0: {"co...原创 2018-12-07 14:32:03 · 2860 阅读 · 0 评论 -
JWT实现用户认证原理与实现(golang)
1 JWT标准规范JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT由三部分组成,头部、载荷与签名。JWT原理类似我们加盖公章或手写签名的的过程,合同上写了很多条款,不是随便一张纸随便写啥都可以的,必须要一些证明,比如签名,比如盖章。JWT就是通过附加签名,保证传输过来的信息是真的,而不是伪造的。头部...转载 2019-01-09 17:47:57 · 1977 阅读 · 0 评论 -
Go实战--golang中使用JWT(JSON Web Token)
今天就来跟大家简单介绍一下golang中如何使用token,当然是要依赖一下github上的优秀的开源库了。首先,要搞明白一个问题,token、cookie、session的区别。token、cookie、session的区别Cookie Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览...转载 2019-01-08 13:59:49 · 4846 阅读 · 0 评论 -
Golang 项目部署实战
一直认为不懂部署的开发工程师不是好的开发工程师,以下以一些实例讲解自己在项目中的 Golang 后端部署的情况。一般部署脚本应该具有构建、启动、停止、回滚已经查看记录日志等功能,以下分别将这些功能以单个脚本的形式给出,当然也可以写成Makefile 的形式。单个部署脚本的形式,在一个目录下建立如下文件:bin # 目录,用于存放每次 build 之后存放的二进制文件app.log ...转载 2018-12-29 11:41:22 · 921 阅读 · 0 评论 -
base64编码
golang中base64的编码和解码可以用内置库encoding/base64package mainimport ( "encoding/base64" "fmt" "log")func main() { input := []byte("https://studygolang.com/pkgdoc") // 演示base64编码 encodeString := ...原创 2018-12-29 10:32:31 · 209 阅读 · 0 评论 -
golang传递接口类型参数时,什么时候用指针
conn, err = ln.Accept()go handleConnection(conn)看到这里我曾经有个疑问,为什么不是 handleConnection(&conn) ? 会想这个问题的人肯定都知道如果conn是个struct,那就会发生复制,可能是写时复制,也可能是立即复制,这里面发生了什么不太清楚,反正感觉就是浪费了资源,但如果是指针传递,那就放心了,因为我们知道那肯...转载 2018-12-18 10:19:40 · 1199 阅读 · 0 评论 -
io.Reader 解析
简介io.Reader 是一个 Interface 类型,功能非常强大,在任何需要读的地方我们都尽量使用它。先来看下它的原型:type Reader interface { Read(p []byte) (n int, err error)}可见,任何实现了 Read() 函数的对象都可以作为 Reader 来使用。Reader 类型标准库中有许多不同的 Reader...原创 2018-12-14 09:52:10 · 5317 阅读 · 0 评论 -
[golang]为什么Response.Body需要被关闭
Body io.ReadCloserThe http Client and Transport guarantee that Body is always non-nil, even on responses without a body or responses with a zero-length body. It is the caller's responsibility to ...转载 2018-12-13 17:59:49 · 2059 阅读 · 0 评论 -
golang echo 代码详解之 log 篇
echo 自带的 log 库log 结构echo 框架的 log 结构体是 echo.Echo 结构体的一个属性 type Echo struct { ... Logger Logger }而 logger 是个这样的接口type ( // Logger defines the logging interface. ...转载 2018-11-16 18:23:05 · 1998 阅读 · 0 评论 -
Golang学习笔记--log模块(三)
Golang的log模块可谓是语言层面上非常基础的一层库,反应的是语言本身的特征而不是一个服务应该怎样怎样。为了方便自己写应用,我按照自己的需求提出一些log的API并重新实现。和Golang的log模块形成互补。自己的log模块设计对于我自己的log模块,暂时不需要log4j里面复杂的配置系统,也就不需要父子继承的命名约定。我需要这样一套系统。在主模块中或者基础模块中进行日志的初始化,在...原创 2018-11-16 18:07:28 · 419 阅读 · 0 评论 -
Golang学习笔记--log模块(二)
前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现。 其源码可以参考官方地址1.Logger结构首先来看下类型Logger的定义:type Logger struct { mu sync.Mutex // ensures atomic writes; protects the followin...原创 2018-11-16 18:00:24 · 437 阅读 · 0 评论 -
Golang学习笔记--log模块(一)
Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路)。不过比手写fmt. Printxxx还是强很多的。至少在输出的位置做了线程安全的保护。其官方手册见Golang log。这里给出一个简单使用的例子:package mainimport ( "log")func main(){ log.Fatal("Come with f...原创 2018-11-16 17:45:54 · 314 阅读 · 0 评论 -
Go中间件
一开始,我们认为编写中间件似乎很容易,但是我们实际编写的时候也会遇到各种各样的坑。让我们来看看一些例子。读取请求在我们的示例中,所有的中间件都将接受http。处理程序作为一个参数,并返回一个http.Handler。这使得人们很容易就能把中间产品串起来。我们所有的中间产品的基本模式是这样的:func X(h http.Handler) http.Handler { retur...原创 2018-11-16 14:12:56 · 761 阅读 · 0 评论 -
Golang学习笔记--遍历文件夹及子文件夹的所有文件
遍历文件夹及子文件夹下的所有文件,最容易想到的就是用递归的方法,先访问当前目录,读取当前目录下的所有文件,如果是个目录,递归调用遍历目录下的所有文件。具体代码如下:package mainimport ( "fmt" "io/ioutil")func GetAllFile(pathname string, s []string) ([]string, error) { rd,...原创 2018-11-06 17:26:03 · 7381 阅读 · 0 评论 -
Golang学习笔记--xml字符串转json
Go语言中struct和xml,struct和json之间的互相转换比较容易实现,那么xml直接转json该如何实现?其本质还是通过struct间接转换的。让我们直接看下代码:package mainimport ( "encoding/json" "encoding/xml" "fmt" "os")var xmlDataRq = `<?xml version="...原创 2018-11-05 14:49:28 · 3899 阅读 · 0 评论