go语言从入门到精通
本专栏主要记录本人的go语言学习过程及心得体会
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
这个作者很懒,什么都没留下…
展开
-
GoLand利用plantuml生成UML类图
编译生成.exe文件并将生成的exe文件拷贝拷贝到$GOPATH/bin下(在操作系统环境变量中注册后,能找到即可)原创 2023-03-20 13:41:38 · 869 阅读 · 0 评论 -
诱发 Goroutine 挂起的 27 个原因
gopark 的 27 个诱发原因,为了方便阅读,我们会根据分类进行说明。3.4.5.6.7.8.9.总结今天这篇文章是对开头 runtime.gopark 函数的详解文章的一个补充,我们能够对此了解到其诱发的因素。主要场景为:通道(Channel)。垃圾回收(GC)。休眠(Sleep)。锁等待(Lock)。抢占(Preempted)。IO 阻塞(IO Wait)其他,例如:panic、finalizer、select 等。我们可以根据这些转载 2021-10-30 21:04:11 · 334 阅读 · 0 评论 -
go kafka常用客户端开发库
1. go常用客户端开发库sarama:https://github.com/Shopify/saramaconfluent-kafka-go: https://github.com/confluentinc/confluent-kafka-gogo_kafka_client: https://github.com/elodina/go_kafka_client’optiopay-kafka: https://github.com/optiopay/kafkasiesta:https://git原创 2021-01-18 09:05:05 · 1093 阅读 · 0 评论 -
golang第三方包tail监听日志文件
1. 下载tail包#go get github.com/hpcloud/tail2. 处理流程首先初始化配置结构体config调用TailFile函数,并传入文件路径和config,返回有个tail的结构体,tail结构体的Lines字段封装了拿到的信息遍历tail.Lnes字段,取出信息(注意这里要循环的取,因为tail可以实现实时监控)3. 相关结构体说明:func TailFile(filename string, config Config) (*Tail, error)t原创 2021-01-18 08:45:46 · 1863 阅读 · 0 评论 -
golang模块viper读取配置文件
文章目录一、介绍二、读取config.json一、介绍Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:设置默认值从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据可以监视配置文件的变动、重新读取配置文件从环境变量中读取配置数据从远端配置系统中读取数据,并监视它们(比如etcd、Consul)从命令参数中读物配置从buffer中读取调用函数设置配置信息简单的设置默认值viper.SetDefault原创 2021-01-18 08:35:08 · 1017 阅读 · 0 评论 -
beego日志模块
1. 安装#go get github.com/beego/beego/v2/logs2.支持的日志引擎console:一般用在开发环境下面,方便调试fileL:一般用来保存常规日志,为生产环境中常用的方式conn:可以用来将日志发送到指定服务器,一般可以用来根据日志触发事件smtp:一般是将生产环境下比较重要的日志发送给相应的管理人员,以便及时发现和解决问题es:将日志推送到ESmultifile:日志输出到多个文件3. 支持的日志界级别级别以此递减 const (原创 2021-01-11 09:01:47 · 1083 阅读 · 0 评论 -
Beego——数据绑定
文章目录1. 绑定普通变量2. 绑定切片1. 绑定普通变量BindVarController.gopackage controllersimport ( "github.com/astaxie/beego" "strconv")type BindVarController struct { beego.Controller}router.gofunc (this *BindVarController) Get() { var str string this.Ctx.In原创 2020-12-25 02:14:53 · 609 阅读 · 0 评论 -
beego tag详解
文章目录1. auto2. pk3. - 忽略字段4. null5. index6. unique7. column8. size9. digits / decimals10. auto_now / auto_now_add11. type12. default13. 使用实例在使用ORM操作创建表时,经常需要用一些tag标签,在这里做一整理1. auto当 Field 类型为 int, int32, int64, uint, uint32, uint64 时,可以设置字段为自增健 AnyFiel原创 2020-12-14 03:08:09 · 922 阅读 · 0 评论 -
beego表达数据验证
文章目录1. 安装2. 实现方式2.1 方法1:StrutTag验证2.2 方法2beego提供了库validation,用于数据验证和错误收集1. 安装go get -u github.com/astaxie/beego/validation2. 实现方式2.1 方法1:StrutTag验证validation.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"原创 2020-12-14 02:47:51 · 1232 阅读 · 0 评论 -
beego格式化输出
文章目录1. 直接输出字符串2. 模板数据输出3. json格式数据输出4. xml格式数据输出5. yaml格式输出6. jsonp格式输出7. 使用实例1. 直接输出字符串2. 模板数据输出3. json格式数据输出4. xml格式数据输出5. yaml格式输出用法:beego.Controller.Data[“yaml”]=数据beego.Controller.ServeYAML6. jsonp格式输出7. 使用实例package routersimport (原创 2020-12-14 02:37:09 · 710 阅读 · 0 评论 -
常用的GoLang包工具
Machinery异步队列 https://github.com/RichardKnop/machineryMqtt通信 github.com/eclipse/paho.mqtt.golang go文档http://www.eclipse.org/paho/clients/golang/微信开发 https://github.com/chanxuehong/wechatfasthttp包 github.com/valyala/fasthttp数据库操作包 https://github.com/goc转载 2020-12-12 21:19:48 · 412 阅读 · 0 评论 -
Uber Go 语言编程规范
相信很多人前两天都看到 Uber 在 github 上面开源的 Go 语言编程规范了,原文在这里:https://github.com/uber-go/guide/blob/master/style.md 。我们今天就来简单了解一下国外大厂都是如何来写代码的。行文仓促,错误之处,多多指正。另外如果觉得还不错,也欢迎分享给更多的人。1. 介绍英文原文标题是 Uber Go Style Guide,这里的 Style 是指在管理我们代码的时候可以遵从的一些约定。这篇编程指南的初衷是更好的管理我们的代码,包转载 2020-12-03 01:09:07 · 593 阅读 · 0 评论 -
go---gorm模块
文章目录特性安装模型定义约定高级选项字段级权限控制嵌入结构体连接数据库MysqlSQLServerSQLite3基础操作创建表创建通过数据的指针来创建用指定的字段创建记录创建记录钩子根据Map创建高级选项关联创建设置默认值查询检索单个对象根据主键检索检索全部对象条件string条件strut & Map条件内联条件NOT条件OR条件Order排序Limit & OffsetGroup & HavingDistinctJoins更新保存所有字段更新单个列更新多列更新的记录数删除删除一条原创 2020-11-22 23:12:45 · 2093 阅读 · 0 评论 -
go面向对象编程
go 面向对象编程需要注意:Go的类型和值:通过定义结构体类型的方式实现类似类的结构没有构造方法,直接使用NewXXX()工厂方法使用嵌入和聚合方式实现继承 ,推荐使用嵌入的方式自由的结构体组合//接口type IPerson interface { SetName(string) GetName() string}//自定义函数type MyFuncType func(int) int//大杂烩结构体type Something struct {原创 2020-09-26 01:19:36 · 242 阅读 · 0 评论 -
go redis客户端对比
go redis 常用客户端列表godis:使用golang实现的redis客户端,灵感来源于jedisredigo:是一个Redis数据库实现的go语言客户端redis: 用Golang实现的Redis客户端xredis:是一个类型安全、可定制化、干净易用的客户端Redis工具上述中,个人比较推荐godis和redigo,也是redis官网上推荐。因为go-redis封装了redis的大部分命令,不用关心redis的命令的细节,直接调用相应接口就行;redigo是基于命令的,发送一个命令,然原创 2020-09-23 23:51:57 · 2153 阅读 · 0 评论 -
go web相关实例记录
http服务器demo实例:package mainimport ( "fmt" "log" "net/http")func sayHello(w http.ResponseWriter, r * http.Request) { r.ParseForm() //解析参数 fmt.Println("Form", r.Form) fmt.Println("method: ", r.Method) fmt.Println("scheme: ", r.URL.Scheme) f.原创 2020-09-20 21:13:10 · 216 阅读 · 0 评论 -
beego 框架hello world(一)
1. 下载beego框架和bee命令行工具 #go get github.com/astaxie/beego# go get github.com/beego/bee ✔go: downloading github.com/beego/bee v1.12.0go: github.com/beego/bee upgrade => v1.12原创 2020-09-19 00:48:37 · 888 阅读 · 0 评论 -
go语言支持Markdown便捷器
需要使用库:转换Markdown语法:russross/blackfriday查找Document的内容:PuerkitoBio/goquery语法高亮:sourcegraph/syntaxhighlight插入模块:html/template执行外部命令:os/exec文件操作:path/filepath创建Web服务器:SimpleHTTPServer解析.yml配置文件:gopkg.in/yaml.v2下载相关库go get github.com/russross/bla.原创 2020-09-15 09:28:49 · 844 阅读 · 0 评论 -
Go语言编码规范
文章目录一、导入标准库、第三方或其它包注释规范包级别结构、接口及其它类型函数与方法其它说明二、命名规则文件名函数或方法常量变量变量命名惯例三、声明语句函数或方法参数的重要程度与逻辑顺序一、导入标准库、第三方或其它包除标准库外,Go 语言的导入路径基本上依赖代码托管平台上的 URL 路径,因此一个源文件需要导入的包有 4 种分类:标准库、第三方包、组织内其它包和当前包的子包。基本规则:如果同时存在 2 种及以上,则需要使用分区来导入。每个分类使用一个分区,采用空行作为分区之间的分割。在非测试文件(原创 2020-09-12 23:45:13 · 467 阅读 · 0 评论 -
gopsutil库获取Cpu、Mem、Disk
gopsutil库获取Cpu、Mem、Diskpackage mainimport ( "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/mem" "time")func GetCpuPercent() float64 { percent, _ := cpu.Percent(time.Second) return per原创 2020-09-09 21:43:30 · 1893 阅读 · 0 评论 -
gin中间件
文章目录gin中间件的作用gin中间件的定义gin内置中间件gin中间件的位置gin中间件的使用gin默认使用中间件单个路由使用中间件路由分组使用中间件全局中间件传参自定义中间件使用gin.BasicAutn计算响应时间gin中间件的作用请求到达http请求处理方法之前,拦截请求:认证权限校验限流数据过滤ip白名单处理完请求后,拦截响应,并进行相应的处理统一添加响应头数据过滤gin中间件的定义中间件就是一个以gin.Context为形参的函数:type Handle原创 2020-09-06 01:57:13 · 894 阅读 · 0 评论 -
Golang命名规范和开发规范
文章目录命名文件命名package变量常量接口结构体方法注释README命名文件命名文件命名一律采用小写,不用驼峰式,尽量见名思义,看见文件名就可以知道这个文件下的大概内容。其中测试文件以_test.go结尾,除测试文件外,命名不出现_。例子:stringutil.go, stringutil_test.gopackage包名用小写,使用短命名,尽量和标准库不要冲突。包名统一使用单数形式。变量变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有转载 2020-09-01 01:43:15 · 609 阅读 · 0 评论 -
cannot find module providing package github.com/gin-gonic/gin: working directory is not part
现象运行程序,报错:example.go:3:8: cannot find module providing package github.com/gin-gonic/gin: working directory is not part of a moduleCompilation finished with exit code 1问题未初始化模块解决办法F:\go\project_demo\gin_frame>go mod initgo: cannot determine mod原创 2020-08-21 23:52:21 · 3218 阅读 · 0 评论 -
go之http处理请求流程
示例代码package mainimport ( "fmt" "net/http" "strings" "log")func sayhello(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.原创 2020-08-21 00:23:14 · 664 阅读 · 0 评论 -
mac Goland常用快键键
基础编辑快键键向上或向下移动当前行 ⇧⌘↑ ⇧⌘↓复制并粘贴当前选中的语句 ⌘D删除当前行 ⌘⌫行注释 ⌘/块注释 ⌥⌘/在当前打开的文件中寻找 ⌘F在当前文件中查找替换 ⌘R被选中的单词下一次出现的位置 ⌘G被选中的单词上一次出现的位置 ⇧⌘G在打开的标签之间导航(即打开的源码文件之间切换) ⇧⌘] ⇧⌘[前后导航(即前一个动作后一个动作之间切换) ⌘[ ⌘]展开或收起代码块 ⌘+ ⌘-操作一个或多个被选中的代码(组合键按相同代码选中几个) ⌃G代码补全查看方法或函数建议的原创 2020-08-18 03:02:16 · 2345 阅读 · 0 评论 -
go语言二进制安装
Go 语言二进制安装方式非常简单,到这里下载https://golang.org/dl/ 二进制安装包解压安装包到/usr/local/go 目录下编辑 /etc/profile, 加入 export PATH=$PATH:/usr/local/go/binsource /etc/profile, 不退出登录让profile生效建立hello.go文件测试下生成是否安装成功package mainimport "fmt"func main() { fmt原创 2020-08-17 00:20:56 · 599 阅读 · 0 评论 -
CentOS 7 go语言开发环境搭建(一)
1、下载安装源下载安装Fedora EPEL安装源 #rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm2、安装golang# yum install golang -y3、验证安装成功[root@bogon ~]# go -versionflag ...原创 2018-08-28 02:34:30 · 1249 阅读 · 0 评论 -
go语言学习资源网址
1、go语言中文网 2、GO语言的进阶之路 3、Go语言实战笔记 4、Go语言资料收集 5、一本学习 Go 语言的免费电子书 6、Go by Example 7、build-web-application-with-golang 8、入门级别的代码: https://github.com/icub3d/home/ 9、快速开发: 使用be...原创 2018-08-27 23:42:37 · 473 阅读 · 0 评论 -
go语言IDE的选择与配置
1、下载go sdk https://www.golangtc.com/download 2、进行 go的gopath和goroot的环境变量配置 3、下载vs code https://code.visualstudio.com/?wt.mc_id=vscom_downloads 3、vs code 安装go插件 启动vscode选择插件->...原创 2018-09-02 02:15:09 · 5323 阅读 · 0 评论 -
go笔记(一)
1、变量声明 var v1 int var v2 string var v3 [10] int //数组 var v4 [] int //数组切片 var v5 struct { f int } //结构体 var v6 *int //指针 var v7 map[string] int //map,key为s...原创 2018-09-05 03:52:49 · 246 阅读 · 0 评论 -
go语言中使用数据类型需要避免的坑(二)
布尔类型 var v1 bool v1 = true v2 := (1==2) 布尔类型不能接受其他类型的赋值以及强制类型转换。 var b bool b = 1 //错误 b = bool(1) //错误 整型: 两个不同类型的整型数不能直接比较,比如int和int8,int和int32 浮点型:...原创 2018-09-05 04:21:22 · 539 阅读 · 0 评论 -
go数组和数组切片(三)
1. 数组 声明: [32] byte [3][5] int 元素访问: for i:=0,i&lt;len(array);i++{ fmt.Println("Element",i,"of array is",array[i]) } for ...原创 2018-09-05 04:51:21 · 407 阅读 · 0 评论 -
go语言中的map(四)
1)变量声明 例如: var mymap map[string] value_info2) 创建 例如: mymap = make(map[string] value_info) mymap = make(map[string] value_info,10) //10表示初始化的存储能力3)元素赋值 mymap["renwoxing"] = value_i...原创 2018-09-06 05:53:57 · 239 阅读 · 0 评论 -
Eclipse集成goeclipse开发插件,安装详情及编写Hello Word(五)
1、go sdk下载和安装,及配置环境变量详见: https://blog.csdn.net/qq_21127151/article/details/82292471 2、eclipse下载 https://www.eclipse.org/downloads/ 3、安装 goeclipse 离线安装: 下载地址:https://github.co...原创 2018-09-06 21:21:18 · 2559 阅读 · 0 评论 -
go语言中的流程控制和基本函数使用(六)
package mainimport &quot;fmt&quot;func function1 (x int) int{ /* 在if语句之后,条件语句之前,可以添加变量初始化语句,用;隔开 */ if x=3; x == 0{// return x 在有返回值的函数中,不允许将最终的return语句放在if else结构中,否则会造成编译失败 ...原创 2018-09-06 22:29:04 · 235 阅读 · 0 评论 -
go语言中的闭包(七)
package mainimport ("fmt")/*闭包:包含自由定义变量的代码块,这些变量不再这个代码内或者任何全局上下文中定义,而是在定义代码块的环境中定义闭包可以作为函数对象或者匿名函数,被赋值给变量,传递给其他函数、被动态创建或者返回*/func add(x,y int) func()(int,int){ i:=0 return func()(int,in...原创 2018-09-08 02:50:37 · 168 阅读 · 0 评论 -
go语言中的继承和接口使用(八)
1、初始化: 在go语言中,未进行显式初始化的变量都被初始化为该类型的零值,boo类型的零值为false,int类型的零值为0,,string类型的零值为空串。 在go语言中没有构造函数的概念,对象的创建由一个全局的创建函数来完成,以NewXXX命名,表示构造函数。 例如: rect1 := new(Rect) rect2 := &R...原创 2018-09-09 02:21:18 · 867 阅读 · 0 评论 -
go语言中的channel(九)
channel: 声明形式: var chanName chan ElementType 例如:声明一个map: var mymap map[string] chan bool 定义:make() 例如:ch := make(chan int) 将数据写入/发送至channel: ch&...原创 2018-09-10 01:25:20 · 6957 阅读 · 0 评论 -
go中的defer关键字使用(十)
package mainimport "fmt"/* 在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量.通常用来释放一些需要释放的额资源,例如文件句柄等。 defer使用的三条规则: 1、当defer被声明...原创 2018-09-16 03:45:07 · 498 阅读 · 1 评论 -
go中的socket使用示例(十一)
/*go语言中对socket的整个通信过程做了封装。其原型如下:func Dial(net,addr,string) (Conn,error)其中,net是网络谢协议名,addr是IP地址或域名,端口号以":"跟随在地址和域名的后面,端口号可选。如果连接成功后,则返回连接对象,否则返回error几种常见协议的调用方式:TCP链接: conn,err := net.Dial("t...原创 2018-09-16 04:08:21 · 1634 阅读 · 0 评论