Golang基础
文章平均质量分 60
思维的深度
这个作者很懒,什么都没留下…
展开
-
golang os/exec 执行终端命令
golang执行终端命令原创 2022-11-26 09:03:43 · 1352 阅读 · 0 评论 -
解决Mac M1 debug报错(could not launch process: can not run under Rosetta)
could not launch process: can not run under Rosetta, check that the installed build of Go is right for your CPU architecture原创 2022-10-05 15:03:30 · 6091 阅读 · 2 评论 -
Golang使用Docker client api接口
Golang使用Docker client api接口原创 2022-08-13 10:35:05 · 3036 阅读 · 0 评论 -
go template使用
go template使用及示例原创 2022-08-07 16:46:43 · 552 阅读 · 0 评论 -
Golang使用websocket
golang使用websocket原创 2022-07-23 10:58:37 · 1217 阅读 · 0 评论 -
Golang单元测试覆盖率统计
go test命令用于执行单元测试go tool cover命令可以统计代码覆盖率在*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用这些测试函数并报告测试结果是PASS或FAIL。基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;go test常用参数> - cover:是否开启覆盖率统.原创 2022-01-25 08:45:54 · 3577 阅读 · 0 评论 -
Golang代码检查golangci-lint使用详解
golangci-lint介绍Golang常用的checkstyle有golangci-lint和golint,今天我们主要介绍golangci-lint,golangci-lint用于许多开源项目中,比如kubernetes、Prometheus、TiDB等都使用golangci-lint用于代码检查,TIDB的makefile中的check-static使用golangci-lint进行代码检查,可参考: https://github.com/pingcap/tidb/blob/master/Mak原创 2021-04-25 20:05:07 · 7638 阅读 · 0 评论 -
解决go mod拉取etcd依赖包报错的问题
go sdk版本在go1.13和go1.14版本使用gomod管理依赖包中有etcd时会出现异常,无法正常拉取etcd包。错误如下:go.etcd.io/etcd/clientv3 tested by go.etcd.io/etcd/clientv3.test imports github.com/coreos/etcd/auth imports github.com/coreos/etcd/mvcc/backend imports ..原创 2020-12-12 14:40:36 · 11517 阅读 · 7 评论 -
Golang 使用RPC
RPC介绍 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。 RPC是一种通讯网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC是远程过程调用,其...原创 2020-10-25 15:45:28 · 414 阅读 · 0 评论 -
Golang 关闭的Channel读写问题
1.向一个已关闭的channel发送元素会引起panicpanic: send on closed channelpackage mainimport ( "sync" "time")func main() { ch := make(chan struct{}) close(ch) var wg sync.WaitGroup wg.Add(1) go func() { ch <- struct{}{} time.Sleep(time.Second*2)原创 2020-08-18 19:42:52 · 4486 阅读 · 0 评论 -
Go Modules详细理解
Go Modules介绍Go Modules官方介绍:https://github.com/golang/go/wiki/Modules#semantic-import-versioningGo Modules是Go语言中正式官宣的项目依赖解决方案,Go modules(前身vgo)于Go1.11版本正式发布,在Go1.14版本以后建议用在生产上,Go官方也鼓励用户从其他依赖管理工具迁移到Go modulesGo Modules使用Go modules使用的前提是Go JD...原创 2020-07-15 18:00:28 · 1800 阅读 · 2 评论 -
Goland-golangcould not launch process decoding dwarf section info at offset 0x0 too short
goland debug报错Goland-golangcould not launch process decoding dwarf section info at offset 0x0 too short,是因为Go源码版本比较高,而调试工具dlv.exe版本比较低造成的,因此更新dlv.exe即可dlv的用法可参考:https://www.jianshu.com/p/737304...原创 2019-12-30 18:10:21 · 382 阅读 · 0 评论 -
golang操作postgreSQL(增删改查实例)
一、PostgreSQL介绍PostgreSQL is a powerful, open source object-relational database system.PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。用于安全地存储数据;支持最佳做法,并允许在处理请求时检索它们。特点PostgreSQL可在所有主要操作系统(即Linux,UNIX(A...原创 2017-12-15 16:55:42 · 6587 阅读 · 2 评论 -
xorm操作PostgreSQL数据库(增删改查实例)
一、xorm介绍xorm是一个简单而强大的Go语言ORM库.通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。特性支持Struct和数据库表之间的灵活映射,并支持自动同步表结构事务支持支持原始SQL语句和ORM操作的混合执行原创 2017-12-15 16:42:04 · 12177 阅读 · 0 评论 -
xorm根据数据库表生成对应的结构体
引入使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段名的对应关系。久而久之,这是一个非常繁琐的过程。事情变得繁琐了,我们都会想,有没有好的办法自动生成 model 呢?今天,记录一种自动生成代码的方法 —— xorm 工具。关于 xorm转载 2017-12-19 20:01:47 · 11594 阅读 · 0 评论 -
golang学习资源
golang优秀开源框架汇总: https://www.ctolib.com/topics-2762.html golang各种学习资源: https://github.com/avelino/awesome-go原创 2017-05-16 17:46:43 · 4287 阅读 · 1 评论 -
golang移除数组中重复的元素
func RemoveDuplicate(list *[]int) []int { var x []int = []int{} for _, i := range *list { if len(x) == 0 { x = append(x, i) } else {原创 2017-02-24 17:34:52 · 13665 阅读 · 3 评论 -
golang中执行定时任务的包—cron
cron(定时任务),按照约定的时间,定时的执行特定的任务(job),cron 表达式表达了这种约定。注:最新的v3版本已经不支持秒,需要把cron表达式中的秒去掉1.cron表达式的基本格式格式一:cron表达式是一个字符串,字符串分为6个域,中间以空格隔开,每个域代表一个含义Seconds MinutesHoursDayofMonthMonthDayofWeek...原创 2017-10-13 11:20:48 · 12953 阅读 · 5 评论 -
Golang中位运算的详细理解
前言:位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。今天就学习一下常用的位运算一、常用的位运算: & 与 AND | 或OR ^ 异或XOR &^ 位清空 (AND NOT) 左移 >> 右移 二、位运算的用法: 位运算都是在二进制的基础上进行运算的,原创 2017-11-05 18:29:30 · 11038 阅读 · 6 评论 -
Golang zap框架应用(一)——根据日志级别将日志存储到不同文件中
目标功能:根据日志级别进行不同文件存储将error以下级别添加到info.log文件中将error及以上添加到error.log文件中下载: go get -u go.uber.org/zapgithub源码:https://github.com/uber-go/zapfunc main() { logger,err := getLogger("D:/log...原创 2019-09-16 19:56:24 · 4966 阅读 · 0 评论 -
Linux系统下Go的下载、安装及配置环境变量,并集成到intellij IDEA中
GOLang的下载和安装有三种方法,我给大家介绍的是用源代码安装一、先到Golang中国下载合适版本的tar包下载地址:http://www.golangtc.com/download 二、解压到 /usr/local目录下命令:tar -C /usr/local -xzf go1.7.3.linux-amd64.tar.gz (以1.73版本为例) 三、在/etc/p...原创 2016-10-29 17:06:37 · 2463 阅读 · 0 评论 -
golang语言并发与并行——goroutine和channel的详细理解(一)
如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人。Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。以下是我入门的学习笔记。Go语言的goroutines、信道和死锁goroutineGo语言中有个概念叫做goroutine, 这类似我们熟知的线程,但是更轻。以下的程序,我们串行地去执行两次loop函...转载 2017-03-04 16:24:29 · 41889 阅读 · 18 评论 -
Golang中Rabin-Karp算法
Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法。Rabin-Karp 算法是基于这样的思路:即把字符串看作是字符集长度进制的数,由数值的比较结果得出字符串的比较结果。 朴素的字符串匹配算法为什么慢?因为它太健忘了,前一次匹配的信息其实有部分可以应用到后一次匹配中去,而朴素的字符串匹配算法只是简单的把这个信息扔掉,从头再来,因此,浪费了时间。好好的利用...转载 2018-05-29 19:02:27 · 670 阅读 · 0 评论 -
golang项目打包
GOLANG打包工程目录结构假设有个Go语言的工程myproject,目录结构如下myproject+-- src |-- myapp | +-- myapp.go +-- mylib +-- logger.go123456其中mylib目录是一个lib库,myapp是一个应用,其中引用了mylib库。工程样例程序转载 2016-12-16 11:57:35 · 6866 阅读 · 0 评论 -
Golang zap框架应用(三)—— 按时间段存储日志
功能实现1.将error以下级别添加到info.log文件中2.将error及以上添加到error.log文件中4.将日志写入到kafka服务中4.按指定时间段记录日志下载:go get -u go.uber.org/zapgo get gopkg.in/Shopify/sarama.v1go get github.com/robfig/croncron...原创 2019-09-20 18:23:48 · 2391 阅读 · 0 评论 -
Golang zap框架应用(二)——将日志信息输出到多个输出流中
目标功能:1.将error以下级别添加到info.log文件中2.将error及以上添加到error.log文件中3.将日志数据写入到kafka中(kafka客户端使用sarama)下载:go get -u go.uber.org/zapgo get gopkg.in/Shopify/sarama.v1var( producerTopic = "klo...原创 2019-09-16 20:07:21 · 5022 阅读 · 2 评论 -
Golang中的runtime.Caller理解
func Caller(skip int) (pc uintptr, file string, line int, ok bool) 参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,.... 返回值: pc是uintptr这个返回的是函数指针 file是函数所在文件名目录 line所在行号 ok 是否可...原创 2019-08-23 17:07:07 · 19017 阅读 · 3 评论 -
Golang omitempty的用法
omitempty作用是在json数据结构转换时,当该字段的值为该字段类型的零值时,忽略该字段。package mainimport ( "fmt" "encoding/json")type Student struct { Name string `json:"name"` Age int `json:"age"` Grade string `json:"gra...原创 2019-05-31 17:56:59 · 18249 阅读 · 1 评论 -
Golang中Context学习
一、应用 Go服务器的每个请求都有自己的goroutine,而有的请求为了提高性能,会经常启动额外的goroutine处理请求,当该请求被取消或超时,该请求上的所有goroutines应该退出,防止资源泄露。 二、使用 1.Context接口type Context interface { //Dealine()函数返回上下文应该取消的时间,如果没...原创 2018-08-27 13:54:13 · 704 阅读 · 0 评论 -
Go高性能日志库zap详细分析
原文地址:https://mp.weixin.qq.com/s/i0bMh_gLLrdnhAEWlF-xDw摘要日志在整个工程实践中的重要性不言而喻,在选择日志组件的时候也有多方面的考量。详细、正确和及时的反馈是必不可少的,但是整个性能表现是否也是必要考虑的点呢?美图技术团队在长期的实践中发现有的日志组件对于计算资源的消耗十分巨大,这将导致整个服务成本的居高不下。此文从设计原理深度分析了 ...转载 2018-08-17 08:56:39 · 34194 阅读 · 1 评论 -
golang strings包源码学习
本文转自Golove博客:http://www.cnblogs.com/golove/p/3236300.htmlstrings 包中的函数和方法------------------------------------------------------------// Count 计算字符串 sep 在 s 中的非重叠个数// 如果 sep 为空字符串,则返回 s 中的字符(非字节)个数 + 1...转载 2018-06-15 15:10:09 · 851 阅读 · 0 评论 -
golang读取配置文件
在项目中往往将一些配置信息放到配置文件中,这样在不同的运行环境中,只需修改配置文件即可。以下介绍两种通过第三方包获取配置文件的方式 一.通过gopkg.in/ini.v1go get gopkg.in/ini.v11. 配置文件test.conf;[mqtt]mqtt_hostname = 127.0.0.1mqtt_port = 8083mqtt_user原创 2017-11-11 12:07:34 · 20799 阅读 · 0 评论 -
protobuf使用详解
定义一个消息类型指定字段类型分配标识号指定字段规则添加更多消息类型添加注释保留标识符(Reserved)从.proto文件生成了什么?标量数值类型默认值枚举使用其他消息类型导入定义使用proto2消息类型嵌套类型更新一个消息类型AnyOneof使用OneofOneof 特性向后兼容性问题映射(Maps)向后兼容性问题包(Package转载 2017-10-31 15:45:40 · 19589 阅读 · 0 评论 -
golang语言并发与并行——goroutine和channel的详细理解(三)
Go语言并发的设计模式和应用场景以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel生成器在Python中我们可以使用yield关转载 2017-03-04 16:27:37 · 3212 阅读 · 4 评论 -
golang语言并发与并行——goroutine和channel的详细理解(二)
Go语言的并发和并行不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话:var quit chan int = make(chan int)func loop() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } quit <- 0}fu...转载 2017-03-04 16:25:48 · 5137 阅读 · 8 评论 -
golang的命名规范及大小写的访问权限
1、golang的命名推荐使用驼峰命名法,必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。2、golang中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用可以简单的理解成,首字母大写是公有的,首字母小写是私有的3、结构体中属性名的大...原创 2017-01-10 18:00:43 · 42781 阅读 · 2 评论 -
beego实现过滤器功能
beego 支持自定义过滤中间件,例如安全验证,强制跳转等。过滤器函数如下所示:beego.InsertFilter(pattern string, postion int, filter FilterFunc, params ...bool)InsertFilter 函数的三个必填参数,一个可选参数· pattern 路由规则,可以根据一定的规则进行路由,如果你全匹配可以用 *原创 2016-12-30 16:35:13 · 16943 阅读 · 0 评论 -
golang中fmt的'占位符'使用
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 # 定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"} 普通占位符占位符 说明 举例转载 2016-12-30 16:09:01 · 2264 阅读 · 0 评论 -
golang中("import cycle not allowed")错误
golang不允许循环导包,如果检测到import cycle,会在编译时报错,通常import cycle是因为设计错误或包的规划问题。import("package A""package B")如果package A中已经导入package B,而本package中又导入package B或者 package A依赖package B,同时 package原创 2016-12-30 15:44:08 · 83400 阅读 · 5 评论 -
golang中json的使用
golang中使用json,经常会使用到两个函数func Unmarshal(data []byte, v interface{}) error1 将json反序列化成struct对象 2将json 反序列化到map中 3 将json反序列化到slice中func Marshal(v interface{}) ([]byte, error)1将str原创 2016-12-30 15:20:23 · 5056 阅读 · 0 评论