![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 68
ITqingliang
一位努力的boy
展开
-
GoLand 中提高研发效率的小技巧
技巧一:快速实现接口中的所有方法在结构体上通过⌥ (Option/Alt) + Enter组合键可调出要实现的接口搜索窗口,选择该结构体期望实现的接口以及接口中的方法,可自动将接口的方法添加到结构体的实现中。如下图:技巧二:将结构体提取成接口该方法没有对应的快捷键。首先需要将鼠标放到结构体内,然后右键 -> 选择Refactor(重构)菜单 -> 选择Extract Interface(提取接口)。最后会弹出窗口,填写一些必要的信息:要生成的接口名、接口被保存的文件位置、选择要生成的接口原创 2022-05-06 10:00:24 · 2597 阅读 · 1 评论 -
WebAssembly 入门教程
文章目录简介入门示例总结简介什么是 WebAssembly?在其主页上:https://webassembly.org/ 有如下描述:WebAssembly(缩写为 Wasm)是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为用于编译编程语言的可移植目标,支持在 Web 上部署客户端和服务器应用程序。目前 Rust 对 WebAssembly 的支持较好。那 Go 什么时候开始支持支持 WebAssembly 的呢?Go 1.11 向 WebAssembly 添加了一个实验性端口。原创 2021-10-11 10:31:48 · 3033 阅读 · 0 评论 -
Go单测从零到溜系列—0.单元测试基础
文章目录go test工具单元测试函数格式单元测试示例go test -vgo test -run回归测试跳过某些测试用例子测试表格驱动测试介绍示例并行测试使用工具生成测试代码测试覆盖率testify/assert安装使用示例总结go test工具Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测原创 2021-09-23 18:27:25 · 462 阅读 · 0 评论 -
Go避坑指南:这些错误你犯过吗?
文章目录1、循环内部1.1、使用引用来循环迭代器变量1.2、在循环中调用 WaitGroup.Wait1.3、循环内使用 defer2、channel 堵塞3、不使用接口4、不注意结构体字段顺序5、测试中不使用 race 探测器6、总结虽然 Go 容易学习,但新手还是比较容易犯一些错误的。本文总结了 5 个常见的错误,你检验下自己犯过没有?!1、循环内部有几种方法可以弄清楚一个循环内的混乱情况。1.1、使用引用来循环迭代器变量出于效率考虑,经常使用单个变量来循环迭代器。由于在每次循环迭代中会有不同原创 2021-06-02 09:54:49 · 160 阅读 · 0 评论 -
构建微服务的十大 Go 框架/库
跳转原创 2021-03-03 10:55:45 · 690 阅读 · 1 评论 -
goland常用快捷键
文章目录Windows1. 查询快捷键2. 自动代码3. 复制快捷方式4. 其他快捷方式MacMac 键盘符号说明Shortcuts 捷径General 常用Usage Search 变量搜索Search / Replace 搜索/替换Editing 文本编辑Navigation 导航WindowsCtrl+/ 或 Ctrl+Shift+/ 注释(// 或者/…/ )Ctrl+D 复制行Ctrl+X 删除行快速修复 alt+enter (modify/cast)代码提示 alt+/ctr+G原创 2020-10-15 11:07:01 · 1979 阅读 · 0 评论 -
你真的懂string与[]byte的转换了吗
string类型和[]byte类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。文章目录两种转换方式原理分析两种转换方式标准转换go中string与[]byte的互换,相信每一位gopher都能立刻想到以下的转换方式,我们将之称为标准转换。// string to []bytes1 := "hello"b := []byte(s1)// []byte to strings2 := string(b)强转换通过unsafe原创 2020-10-13 16:07:11 · 1735 阅读 · 0 评论 -
go语言实现二维码
以前写过一篇用java语言实现二维码,今天看到了用go语言实现二维码,发现简单了很多。文章目录go语言实现二维码生成二维码字节自定义二维码go语言实现二维码使用Go语言编程时,生成任意内容的二维码是非常方便的,因为我们有go-qrcode这个库。该库的源代码托管在github上,大家可以下载使用 https://github.com/skip2/go-qrcode。go get github.com/skip2/go-qrcode这个库的使用很简单,假如我要以我的博客网站地址https://bl原创 2020-08-07 09:46:32 · 639 阅读 · 1 评论 -
Go工具之generate
Go语言提供了一系列强大的工具,灵活使用这些工具,能够让我们的项目开发更加容易,工具集包含如下。bug start a bug reportbuild compile packages and dependenciesclean remove object files and cached filesdoc show documentation for package or symbolenv print Go environ原创 2020-06-26 09:54:29 · 2600 阅读 · 0 评论 -
你知道几种Go并发控制方式?
文章目录引言WaitGroupChannelContext总结文献引言Golang中通过go关键字就可开启一个goroutine,因此,在Go中可以轻松写出并发代码。但是,如何对这些并发执行的groutines有效地控制?提到并发控制,很多人可能最先想到的是锁。Golang中同样提供了锁的相关机制,包括互斥锁sync.Mutex,和读写锁sync.RWMutex。除了锁,还有原子操作sync/atomic等。但是,这些机制关注的重点是goroutines的并发数据安全性。而本文想讨论的是gorouti原创 2020-06-08 08:44:33 · 1576 阅读 · 0 评论 -
你还在用官方的error库么,那就弱爆了
在一个项目中,你是否还在为出现error在哪里,定位error而苦恼?你是否还在为error中的信息太少而苦恼;那么我告诉你,本文会介绍给你一个非常好用的error库,让你追查error起来不再痛苦。我们今天的结构分为四个部分:介绍演示源码解说总结介绍其实我们可以思考一下,我们在一个项目中使用错误机制,最核心的几个需求是什么?1 附加信息:我们希望错误出现的时候能附带一些描述性的错误信息,甚至于这些信息是可以嵌套的。2 附加堆栈:我们希望错误不仅仅打印出错误信息,也能打印出这个错误的堆栈信原创 2020-06-03 09:38:56 · 658 阅读 · 1 评论 -
Go 编译器内核:给 Go 新增一个语句
文章目录任务 —— 增加新的语句Go 编译器的高级结构扫描解析创建 AST类型检查分析并重写 AST尝试结论部分 1Appendix - 构建 Go 的工具链参考资料任务 —— 增加新的语句很多语言都有 while 语句,在 Go 中对应的是 for:for <some-condition> { <loop body>}增加 while 语句是比较简单的,因此 —— 我们只需简单将其转换为 for 语句。所以我选择了一个稍微有点挑战性的任务,增加 until。unti原创 2020-05-26 15:48:47 · 494 阅读 · 0 评论 -
Go 语言开发者的神器—Gotx
文章目录简介用法交互式运行环境REPL直接运行Go语言代码文件使用Goxt内置的代码编辑器直接运行Gotx云端Gitee库中的例子代码查看Gotx云端Gitee库中的例子代码直接远程执行Gotx代码加密源代码文件Encrypt source code file解密代码文件直接解密执行加密后的代码文件使用Gotx进行图形界面编程使用Gotx的命令行版本Gotxc文献简介Gotx是一个Go语言(Golang)的解释器和运行环境,只有单个可执行文件,绿色、跨平台,无需安装任何Go语言环境就可以直接运行Go语言原创 2020-05-25 09:25:36 · 1314 阅读 · 0 评论 -
go中的定时任务--gron
文章目录简介快速使用时间格式自定义任务一点源码自定义时间策略总结参考简介gron是一个比较小巧、灵活的定时任务库,可以执行定时的、周期性的任务。gron提供简洁的、并发安全的接口。我们先介绍gron库的使用,然后简单分析一下源码。快速使用先安装:$ go get github.com/roylee0704/gron后使用:package mainimport ( "fmt"...原创 2020-05-05 09:32:49 · 3549 阅读 · 0 评论 -
必会技能:简明的 Go Protocol Buffer 教程
在这个教程里面,我们将学习如何在你的 Go 应用中使 protocol Buffers 数据格式。我们将详细讲述这种数据格式,以及为什么这种数据格式优于传统的数据格式,例如 XML 甚至 JSON。在我们写更多复杂的例子之前,我们将从一个简单的例子开始编写运行。在这个教程的最后,你会对 protoco Buffe 有一个基础的了解,并且你将可以顺利的写出更好的系统。文章目录视频教学Protoc...原创 2020-04-26 09:37:04 · 420 阅读 · 0 评论 -
Go 框架解析 -iris
文章目录前言安装iris的生命周期关键代码解析结语文献前言之前已经发过一篇过于beego的文章《golang框架解析-beego》,今天带来的是go框架iris的解析,主要讲解iris框架的一个生命周期过程。在读这篇文章之前,如果没看过《golang框架解析-beego》的可以先去看看,因为《golang框架解析-beego》有讲关于go如何启动一个http server,这个知识点对理解本...原创 2020-04-21 09:34:32 · 1770 阅读 · 0 评论 -
Go Vet 命令:超出预期的强大
文章目录前言内置分析器Atomiccopylocksloopclosurelostcancelstdmethodsstructtag自定义分析器自定义分析命令参考资料前言Go vet 命令在编写代码时非常有用。它可以帮助您检测应用程序中任何可疑、异常或无用的代码。该命令实际上由几个子分析器组成,甚至可以与您的自定义分析器一起工作。让我们首先回顾一下内置的分析器。内置分析器可以通过命令 go...原创 2020-04-14 09:10:21 · 3227 阅读 · 0 评论 -
最流行的 Web 框架 Gin 源码阅读
文章目录前言gin框架预览request数据是如何流转的HTTP是如何建立起来的net/http是如何建立 socket的为什么会出现很多go框架文献前言最近公司大部分项目开始往golang换, api的框架选定使用gin, 于是将 gin的源码看了一遍, 会用几篇文章将gin的流程及流程做一个梳理, 下面进入正题.gin框架预览上图大概是 gin里面比较重要的模块. 从 gin的官方第...原创 2020-04-10 10:12:07 · 1089 阅读 · 0 评论 -
Beego框架代码分析
文章目录前言安装代码分析go如何启动一个http serverbeego路由分析beego.Run()主要的工作beego.Router() 如何注册路由文献前言也许beego框架在国内应该是众多PHPer转go的首选,因为beego的MVC、ORM、完善的中文文档让PHPer们得心应手,毫无疑问我也是。这种感觉就像当年入门PHP时使用ThinkPHP一样。也许随着你的认知的提升,你会讨厌现...原创 2020-04-09 10:13:01 · 399 阅读 · 0 评论 -
如何使用 Diago 诊断 Go 程序中的 CPU 和内存使用情况
Diago 是借助 pprof 生成的配置文件和堆快照的可视化工具。它是一个独立的应用程序,显示每个函数(或函数中每行代码)的 CPU 使用率的调用树,但也可以显示堆快照。我们将在这篇简短的文章中介绍如何使用 Diago 来深入了解 Go 程序并帮助您调试它们。文章目录在 Go 程序中运行 pprof获取 profile 和堆快照Profile堆快照使用 Diago 可视化 Profile...原创 2020-04-07 11:19:20 · 443 阅读 · 0 评论 -
Micro In Action:Pub/Sub
本文是Micro[1]系列文章的第三篇。我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。接下来谈谈异步消息处理。要构建一个可伸缩、高容错、高并发的系统, 异步消息处理是一个关键技术。这种技术虽然强大, 但开发起来也相当麻烦, 远没有同步请求那样简单直接。好在 Micro 对这个编程模型作了非常好的抽象与封装,供我们便利地使用。除此之外, 借助 Micro...原创 2020-03-19 09:23:29 · 271 阅读 · 0 评论 -
Micro In Action:项目结构与启动过程
文章目录项目结构启动过程解析查看运行时状态总结参考资料项目结构在上篇文章中我们创建了一个简单的项目, 并过将它运行起来。本篇将继续这个旅程,先介绍项目结构及其中每个文件的用途。项目结构如下:.├── main.go├── generate.go├── plugin.go├── proto/hello│ └── hello.proto│ └── hello.pb.go│...原创 2020-03-15 10:40:29 · 640 阅读 · 1 评论 -
Micro In Action基本介绍
这个系列聊一聊 Micro[1], 我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。Micro 很强大,掌握后使用起来也相当便利。但它的演进速度非常快, 导致其文档有严重缺失和滞后。很多功能没有文档;很多基本问题不得不去 GitHub 上提 issue 或去 Slack 里面问,又得不到什么反馈。最后, 查看源码成了唯一的学习途径。这对于使用者来说非常不友...原创 2020-03-12 09:40:43 · 1116 阅读 · 0 评论 -
对象池的实现原理分析
文章目录什么是对象池?有哪些场景需要使用对象池?fmt包的应用字符串拼接应用对象池的实现(go1.12)相关结构定义设计思想对象池中获取对象向对象池归还对象GC回收对象池对象池的升级(go1.13)结构的调整方法实现调整性能的提升参考资料什么是对象池?对象池从字面上来理解,就是一个能存储很多对象的池子。在Go里面,对象池是通过使用sync包里的Pool结构来实现的,对象池能提高内存复用,减少内...原创 2020-03-09 10:04:27 · 1061 阅读 · 0 评论 -
Golang内存分配实现分析
文章目录引言基本概念什么是span怎么区分span内存管理组件mcachemcentralmheap内存分配规则gc改进结尾参考文献引言golang是谷歌2009年发布的开源编程语言,截止目前go的release版本已经到了1.12,golang 语言专门针对多处理器系统应用程序的编程进行了优化,使用 golang 编译的程序可以媲美 C /C++代码的速度,而且更加安全、支持并行进程。和其他...原创 2020-03-06 10:40:52 · 882 阅读 · 0 评论 -
锁的实现原理分析
文章目录什么是锁为什么使用锁Golang中的锁cas、atomic自旋锁(spinlock)信号量mutexmutex的使用mutex的必要性mutex演进互斥锁自旋锁公平锁参考文献什么是锁锁的本质,就是一种资源,是由操作系统维护的一种专门用于同步的资源比如说互斥锁,说白了就是一种互斥的资源。只能有一个进程(线程)占有。当一个进程(线程)通过竞争获得锁的时候,其他进程(或线程)将得不到这把...原创 2020-03-05 10:18:49 · 4562 阅读 · 0 评论 -
Interface实现原理分析
文章目录Duck Typing什么是鸭子类型Go语言的鸭子类型概述接口类型接口定义实现接口接口和指针nil和non-nil接口值实现原理ifaceeface具体类型转换成接口类型接口与接口的转换断言参考文献Duck Typing什么是鸭子类型图中的大黄鸭是一只鸭子吗?如果从传统角度来看,图中的大黄鸭并非是一只鸭子,因为它即不会叫也不会跑,甚至连生命都没有首先看下鸭子类型的定义If i...原创 2020-03-04 10:12:08 · 1611 阅读 · 0 评论 -
Channel实现原理分析
文章目录什么是channelchannel的实现问题参考文献什么是channel我们来看《Go语言编程》中的一段话channel是Go语言在语言级别提供的goroutine间的通信方式,是一种进程内的通信方式。通俗点儿解释就是channel可以在两个或者多个goroutine之间传递消息。在Go中,goroutine和channel是并发编程的两大基石,goroutine用来执行并发任...原创 2020-03-03 11:57:09 · 10933 阅读 · 1 评论 -
Slice实现原理分析
众所周知,在golang中,slice(切片)是我们最常使用到的一种数据结构,是一种可变长度的数组,本篇文章我们主要结合源码来介绍一下slice的底层实现,以及在使用slice时的一些注意事项。文章目录Slice结构体slice初始化append操作slice截取slice深拷贝值传递还是引用传递参考文献Slice结构体首先我们来看一段代码:package mainimport ( ...原创 2020-03-02 10:09:20 · 1765 阅读 · 0 评论 -
Actor 还是 CSP?Go 中的并发模式还能讲这么细致
文章目录基本概念了解并发和并行CSP vs Actor 模型ActorCSP区别GO 中的并发模型并发设计模式Barrier 模式使用场景代码实现TipsFuture 模式使用场景代码实现Pipeline 模式使用场景代码实现Workers Pool 模式使用场景代码实现Pub/Sub 模式使用场景代码实现注意事项参考基本概念了解并发和并行并发:强调一段时间做多件事并行:强调同一时间做多件...原创 2020-02-27 10:29:15 · 1214 阅读 · 0 评论 -
如何"优雅"地发布自己的 go module 模块到 pkg.go.dev
文章目录前言pkg.go.dev简介发布第一个版本发布新版本发布breaking changes添加 go dev badge结语附录前言截止到 go1.13, go 官方推出的包管理工具 go module 已经发布三个版本了,网上也有很多文章介绍如何使用 go module(推荐观看附录中Go夜读的视频和官方Wiki),但是大部分都是讲如何引用别人的 go module 模块,鲜有提到如何...原创 2020-02-24 15:21:47 · 3071 阅读 · 0 评论 -
使用gorilla/mux增强Go HTTP服务器的路由能力
今天这篇文章我们将会为我们之前编写的 HTTP服务器加上复杂路由的功能以及对路由进行分组管理。在之前的文章《深入学习用 Go 编写HTTP服务器》中详细地讲了使用 net/http进行路由注册、监听网络连接、处理请求、安全关停服务的实现方法,使用起来非常方便。但是 net/http有一点做的不是非常好的是,它没有提供类似 URL片段解析、路由参数绑定这样的复杂路由功能。好在在 Go社区中有一个非常...原创 2020-02-20 15:40:10 · 737 阅读 · 0 评论 -
如何读取环境变量值?Go 每日一库之 godotenv
简介twelve-factor应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。但是在实际开发中,如果同一台机器运行多个项目,设置环境变量容易冲突,不实用。godotenv库从.env文件中读取配置, 然后存储到程序的环境变量中。在代码中可以使用读取非常方便。godotenv源于一个 Ruby 的开源项目dotenv。快速使用第三方库需要先...原创 2020-02-18 09:51:40 · 1353 阅读 · 0 评论 -
一再强调需要掌握的:五分钟学会使用 go modules
go modules 是 golang 1.11 新加的特性。如今 1.13 都已经发布了第 7 个小版本了,几乎所有大项目均已开始使用,这自然也包括 Kubernetes 生态中的众多项目。笔者在开发 OAM 相关项目的时候,却发现 modules 的各项功能看似简单,却并没有那么好用,于是便想给大家分享一下使用心得,希望大家也能在最短时间内学会 modules 的使用,避免踩坑。文章目录mo...原创 2020-02-17 10:38:55 · 413 阅读 · 0 评论 -
学习 Go 编程的十大在线资源及新手如何学习 Go 语言
转载地址:https://mp.weixin.qq.com/s/5thVaXXcT_GKiEtfZQ-ERg原创 2020-02-04 10:09:10 · 249 阅读 · 0 评论 -
go交叉编译出错(Mac编译Linux)
Mac编译Linux命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build执行之后发现报错:# github.com/mattn/go-sqlite3../../../../mattn/go-sqlite3/sqlite3_go18.go:18:10: undefined: SQLiteConn然后我去网上找答案,很多人都说,需要把CGO_...原创 2020-01-16 10:35:26 · 4562 阅读 · 0 评论 -
Exceptions 和 Return
前几天Thiago Pontes 分享了一篇关于异常被认为是反模式的博客给他的几个朋友。我对异常有一个不同的观点。我想如果写一个关于 exceptions 的博客会非常的有趣。我认为异常是一个非常好的功能,如果缺少异常可能会引起更大的错误。没有异常的程序如果你曾经用过 C 语言,你就记得 -1 和 NULL 作为返回值意味着错误,或者在这些情况下你需要记得去检查全局的错误号从而查出是否哪里出了...转载 2019-08-29 16:42:37 · 274 阅读 · 0 评论 -
Golang 中的依赖注入之使用更高阶的函数
你可以找到一个完整的代码示例在github.com/steinfletcher/func-dependency-injection-go。例子包含了一个暴露 REST 接口的 http 服务器。简介在这篇博文我们介绍一种 Go 中依赖注入的方式 – 使用更高阶的函数和闭包。考虑下以下返回用户资料的 domain 层函数。func GetUserProfile(id string) Use...转载 2019-09-04 11:06:52 · 679 阅读 · 2 评论 -
Go中的gRPC简介
给使用 Go 语言的初学者的 gRPC 概述RPCRPC 是用于 软件应用之间点对点通信 的 网络编程模型 或是 进程间通信技术。RPC 是一种 协议,一个程序能够使用该协议,对位于另外一台计算机中的程序请求服务,而无需了解网络的详细信息。RPC 代表 “远程过程调用”,它是一种 客户端 - 服务器交互 的形式 - 调用者是客户端,执行者是服务器 - 通常通过 " 请求 - 响应消息传递系...转载 2019-09-05 15:47:51 · 3638 阅读 · 0 评论 -
在 Go 中使用 Websockets 和 Socket.IO
注 - 本教程是使用 Go 1.9 版和 googollee/go-socket.io 编写的Websockets 我觉得非常有趣,在应用程序之间通信中使用标准 RESTful API 方案之外,它为我们提供了一个替代选项。使用套接字,我们可以做到成千上万个不同客户端之间的实时通信,而不必让每分钟数十万个 RESTful API 调用来轰炸我们的服务器。文章目录视频教程真实生活的例子RES...转载 2019-09-10 09:14:35 · 1875 阅读 · 2 评论