![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
Dev-L
这个作者很懒,什么都没留下…
展开
-
golang git pre-commit钩子
#!/bin/bashSTAGED_GO_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".go$")if [ "$STAGED_GO_FILES" = "" ]; then exit 0fiPASS=truefor FILE in $STAGED_GO_FILESdo # 跳过vendor目录下的文件 if [ "$FILE" = "vendor"* ];then c原创 2020-06-19 14:16:35 · 1686 阅读 · 1 评论 -
将版本信息写入Go编译的二进制文件
将版本信息写入Go编译的二进制文件MakefileSHELL := /bin/bashBASEDIR = $(shell pwd)DOCKER_TARGET=hub.docker.com/lee/hello# build with version infosversionDir = "main"gitTag = $(shell if [ "`git describe --tags --abbrev=0 2>/dev/null`" != "" ];then git describe --原创 2020-06-18 11:51:58 · 796 阅读 · 0 评论 -
[译]OpenTracing之旅
[译]OpenTracing之旅原文链接:https://medium.com/opentracing/take-opentracing-for-a-hotrod-ride-f6e3141f7941OpenTracing是一个新的开放标准,适用于应用和开源软件包的分布式链路追踪和监控。本文将借助一个demo带你探索OpenTracing的特性及功能,一步步向你展示如何在实践中应用OpenTracing概念来监控基于微服务的体系结构并进行性能问题的根因分析;本文还强调了OpenTracing的关键特性:厂原创 2020-06-15 16:43:24 · 547 阅读 · 0 评论 -
自己易忽略的golang规范
Interface 合理性验证var _ http.Handler = (*Handler)(nil)关于Mutextype smap struct { sync.Mutex // only for unexported types(仅适用于非导出类型) data map[string]string}type SMap struct { mu sync.Mutex // 对于导出类型,请使用私有锁 data map[string]string}Ch..原创 2020-06-01 18:09:51 · 395 阅读 · 0 评论 -
Gorm的关联关系
model.gopackage modelsimport "github.com/jinzhu/gorm"import _ "github.com/jinzhu/gorm/dialects/sqlite"type Email struct { gorm.Model Email string UserID uint}// User 拥有并属于多种 Language,使用 `u...原创 2020-04-27 16:29:36 · 1932 阅读 · 0 评论 -
tmpNote
type Slice []intfunc NewSlice() Slice { return make(Slice, 0)}func (s *Slice) Add(elem int) *Slice { *s = append(*s, elem) fmt.Print(elem) return s}func TestAdd(t *testing.T) { s :=...原创 2020-03-29 09:07:31 · 126 阅读 · 0 评论 -
dlv远程调试golang程序注意事项
自行安装dlv安装There are two ways to install on Linux. First is the standard go get method:go get -u github.com/go-delve/delve/cmd/dlvAlternatively make sure $GOPATH is set (e.g. as ~/.go) and:$ git c...原创 2019-11-17 18:29:09 · 1809 阅读 · 0 评论 -
GORM中文文档
GORM是类似Django ORM,对开原创 2019-06-30 10:41:54 · 14761 阅读 · 2 评论 -
pprof简介
pprof是什么pprof 是一个强大的性能分析工具,可以捕捉到多维度的运行状态的数据,下面简单介绍一下pprof的用法。golang在语言层面集成了profile采样工具,在程序运行过程中可以获取cpu、heap、block、traces等执行信息,这些会涉及到runtime/pprof、net/http/pprof、runtime/trace等package。pprf的使用一般情况下,...原创 2019-07-01 22:57:10 · 14110 阅读 · 0 评论 -
Go 语言中Select与for结合使用时可能会遇到的坑
问题现象当for 和 select结合使用时,break语言是无法跳出for之外的:package mainimport ( "fmt" "time" "context")func main(){ d := time.Now().Add(3000 * time.Millisecond) ctx, cancel := context.WithDeadline(context.B...原创 2019-06-08 11:48:35 · 1933 阅读 · 0 评论 -
golang for range的坑
case 1: 非引用类型range会复制对象,而不是不是直接在原对象上操作。package mainimport "fmt"func main(){ a := [3]int {1, 2, 3} for i, v := range a{ //i,v从a复制的对象里提取出 if i == 0{ a[1], a[2] = 200, 300...原创 2019-06-08 11:32:46 · 1494 阅读 · 0 评论 -
golang Windows下编译linux可执行文件
编译windows文件 SET CGO_ENABLED=1 SET GOARCH= SET GOOS=windows go build xxx编译Linux文件 SET CGO_ENABLED=0 SET GOARCH=amd64 SET GOOS=linux go build xxx查看linux cpu架构uname -...原创 2019-06-01 09:37:43 · 7427 阅读 · 0 评论 -
Go Modules 的使用方法
简介Go 1.11 和 1.12 引入了对 modules(模块)的初步支持,这是一个能让依赖项的版本信息更加明确和易于管理的依赖管理系统。本文旨在为你使用模块提供基本的操作指导。后续会有一篇文章来说明如何发布一个模块以供别人使用。一个模块是一系列Go 代码包的集合,它们保存在同一个文件树中。文件树的根目录中包含了一个go.mod文件。go.mod文件定义了一个模块的 modul...转载 2019-04-01 22:20:55 · 4344 阅读 · 0 评论 -
golang testing简介
单元测试Golang中的单元测试对文件名、方法名和参数都有很严格的要求:文件名必须以xx_test.go命名 方法必须是Test[^a-z]开头 方法参数必须t *testing.Ttesting的通用方法T结构内部是继承自common结构,common结构提供集中方法,是我们经常会用到的:当我们遇到一个断言错误的时候,我们就会判断这个测试用例失败,就会使用到...原创 2019-04-06 11:26:10 · 2375 阅读 · 0 评论 -
Json Web Token 详解
什么是JWTJSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。让我们来假想一下一个场景。在A用户关注了B用户的时候,系统发邮件给B用户,并且附有一个链接“点此关注A用户”。链接的地址可以是这样的 https://your.awesome-app.com/make-friend/?from_user=B&a...原创 2019-04-06 10:32:45 · 5536 阅读 · 4 评论 -
Go语言从入门到精通之golang初识(续)
字符串相关操作strings包:func Contains(s, substr string) bool func ContainsAny(s, chars string) bool // 是否包含chars内的任意字符func ContainsRune(s string, r rune) bool func Count(s, sep string) intfunc Equal...原创 2019-01-26 14:03:15 · 500 阅读 · 0 评论 -
Go语言从入门到精通二——切片和map
数组与切片数组数组:是同一种数据类型的固定长度的序列。数组定义:var a [len]int,比如:var a[5]int,一旦定义,长度不能变长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic数组是值类...原创 2019-01-26 22:25:40 · 1064 阅读 · 0 评论 -
Go语言从入门到精通三——struct和interface
Go中的structstruct用来自定义复杂数据结构,相当于其他面向对象语言中的Class。struct里面可以包含多个字段(属性)struct类型可以自定义方法,注意和函数的区分:方法有一个接受对象,而函数没有struct类型是值类型struct类型可以嵌套Go语言没有class类型,只有struct类型struct声明语法:type 标识符 struct{field1...原创 2019-01-27 13:53:38 · 2810 阅读 · 0 评论 -
Go语言从入门到精通四——反射
反射反射:可以在运行时动态获取变量的相关信息,需要导入reflect包。import ("reflect")用法:reflect.TypeOf,获取变量的类型,返回reflect.Type类型reflect.ValueOf,获取变量的值,返回reflect.Value类型reflect.Value.Kind,获取变量的类别,返回一个常量reflect.Value.Interfac...原创 2019-02-16 15:06:32 · 260 阅读 · 0 评论 -
Go语言从入门到精通五——终端读写&文件读写
终端读写和C语言一样,终端分为三类:os.Stdin:标准输入os.Stdout: 标准输出os.Stderr:标准错误输出终端读写示例package mainimport ( "fmt")var ( firstName, lastName, s string i int f fl...原创 2019-02-16 23:08:01 · 563 阅读 · 0 评论 -
Go语言从入门到精通六——JSON操作及错误处理
JSONJSON数据协议json是一种轻量化的格式(相比于xml),是当下流行的一种前后端交互的数据格式。其工作模式如下:golang中的 json 操作导入包:import “encoding/json”序列化: json.Marshal(data interface{})反序列化: json.UnMarshal(data []byte, v interface{})json...原创 2019-02-17 14:11:29 · 444 阅读 · 0 评论 -
golang接口与反射剖析
interface的实质golang中的interface是什么接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现接口的。C++没有提供interface这样的关键字,它通过纯虚基类实现接口,而java则通过interface关键字声明接口。它们有个共同特征就是一个类要实现该接口必须进行显示的声明,如下是j...原创 2019-02-24 21:44:28 · 879 阅读 · 0 评论 -
Go语言从入门到精通七——并发篇goroutine和channel
goroutine在go语言中,每一个并发的执行单元叫做一个goroutine这里说到并发,所以先解释一下并发和并行的概念:并发:逻辑上具备同时处理多个任务的能力并行:物理上在同一时刻执行多个并发任务当一个程序启动时,其主函数即在一个单独的goroutine中运行,一般这个goroutine是主goroutine;如果想要创建新的goroutine,只需要再执行普通函数或者方法的的前...原创 2019-02-24 21:57:49 · 542 阅读 · 0 评论 -
Go语言从入门到精通八——socket和http编程
golang中的socket编程关于socket的基础知识,这里就不介绍了,可以参考python socket编程。golang创建socket很简单,服务端处理流程通常为:监听端口接受客户端的连接请求创建goroutine,处理该请求示例代码如下:package mainimport ( "fmt" "net")func main() { //...原创 2019-03-03 16:51:24 · 694 阅读 · 0 评论 -
Go语言从入门到精通九——使用golang操作mysql、redis和RabbitMQ
操作mysql增package mainimport ( "fmt" "github.com/jmoiron/sqlx" _ "github.com/go-sql-driver/mysql" //初始化一个mysql驱动,必须)type Person struct { UserId int `db:&原创 2019-03-03 18:55:07 · 664 阅读 · 0 评论 -
Go调度器系列之——宏观看调度器
上一篇文章《Go语言高阶:调度器系列(1)起源》,学goroutine调度器之前的一些背景知识,这篇文章则是为了对调度器有个宏观的认识,从宏观的3个角度,去看待和理解调度器是什么样子的,但仍然不涉及具体的调度原理。三个角度分别是:调度器的宏观组成 调度器的生命周期 GMP的可视化感受在开始前,先回忆下调度器相关的3个缩写:G: goroutine,每个G都代表1个goroutin...转载 2019-03-31 15:54:33 · 218 阅读 · 0 评论 -
Go语言从入门到精通之golang初识
golang语言特性垃圾回收内存自动回收,再也不需要开发人员管理内存开发人员专注业务实现,降低了心智负担只需要new分配内存,不需要释放天然并发从语言层面支持并发,无需第三方库goroute,轻量级线程,创建成千上万个goroute成为可能基于CSP(Communicating Sequential Process)模型实现channel管道,类似unix...原创 2019-01-25 22:57:24 · 610 阅读 · 0 评论