Golang
文章平均质量分 66
Go语言学习记录
羁士
后端开发工程师
展开
-
Mac brew升级go到指定版本
所以需要升级go1.17,但是直接brew upgrade go会执行失败,所以还是install一下吧。这是终端会显示所有的查询结果,这里因为要安装go1.17,所以执行以下命令进行安装。目前使用的go1.16版本,但是不支持UnixMilli。至此安装结束,终端输入go version 进行验证。安装成功后,进行链接以下就可以了。先使用命令来查找一下go版本。原创 2022-08-22 16:52:04 · 5299 阅读 · 0 评论 -
依赖注入是什么?Go是如何实现依赖注入的?
什么是依赖注入依赖注入的好处Go的依赖注入-wire依赖注入是什么?第一次听到这个词的时候我是一脸懵逼的,很拗口有没有,可能很多学过spring的同学觉得这是很基础很好理解的知识,但因为我之前没学过Java和spring,所以第一次接触这个词的时候是很懵的。依赖注入,英文名dependency injection,简称DI。依赖两个字很好理解,在软件设计上,从架构模块到函数方法都存在大大小小的依赖关系。比如说在new A 之前需要先new B ,A依赖于B,这时候我们就可以说B是A的依赖,A.原创 2021-07-26 21:35:10 · 1249 阅读 · 2 评论 -
Golang 不规范时间格式的转换
Golang 不规范时间格式的转换go语言在处理年月日时间格式的时候,总是需要按照官方规范的格式进行定义,且不支持变更,这在很多场景下是不能适应的,比如处理excel时的日期格式总数2021/7/15,但是官方包只支持解析"2006/01/02",也就是说月份必须是两位数,难道要我匹配补齐两位数吗?很麻烦有没有!然后发现轮子早已被造好,这个库支持各种各样的时间格式,甚至是英文和汉字,太????了。https://github.com/araddon/dateparse用起来也很简单,直接Parse原创 2021-07-17 14:15:14 · 1188 阅读 · 0 评论 -
Golang正则表达式不支持复杂正则和预查问题解决
Golang正则表达式不支持复杂正则和预查问题解决我有一个需求,需要匹配一段字符串中第几季的这个几,那么按正则表达式的语法,我的表达式应该是这样的`(?<=第)\d+(?=季)`然而,当我用go官方包regexp的时候,compile的时候报了个错误:error parsing regexp: invalid or unsupported Perl syntax: (?<啥意思呢?语法错误,不支持(?<,然而我在线运行的时候明明是没错的,这说明go的正则引擎不支持负向预查原创 2021-07-15 21:17:05 · 8435 阅读 · 4 评论 -
Day4——GO基础语法(声明命名和作用域)
100day学会golang系列:https://github.com/qisenshi/Go-100-Days持续更新中…GO基础语法1,命名和声明Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。和其他语言类型,Go语言中也有一些关键字是不用用于命名的,类似if和sw原创 2021-07-04 15:40:22 · 141 阅读 · 0 评论 -
Golang变量遮蔽——Shadowing
在golang中,我们经常会用:=来声明变量,这很方便但也会带来一些问题。当变量遇到作用域时就容易产生shadowing。比如说我们经常会遇到的:shadow: declaration of "err" shadows declaration什么是变量隐藏呢?就是当年在后面重新声明了前面已经声明的同名变量时,后面的变量值会遮蔽前面的变量值,虽然这两个变量同名但值却不一样。这样是很容易产生问题的。举个栗子来看一下:func main() {n ...原创 2021-03-19 16:43:23 · 1991 阅读 · 0 评论 -
golang处理excel打开csv乱码问题
最近在一个项目中导入导出csv文件的时候用excel打开都会出现乱码的情况,但是用number打开却是正常的,由此可知是编码问题导致。在导入读取csv文件时,因为golang默认支持utf8编码,所以如果导入的csv文件不是utf8编码就会产生乱码,所以在读取文件的时候需要进行一个编码格式转换。用到两个包:"golang.org/x/text/encoding/simplifiedchinese""golang.org/x/text/transform"然后将GBK编码转换为UTF8编码原创 2020-12-16 11:27:54 · 4913 阅读 · 0 评论 -
golang中的类型转换(string,int,float)
go是一种强类型的语言,所以如果在赋值的时候两边类型不一致会报错,就连int都分为int,int8,int32,int64这么多种。但同一基础类型(int,float)的变量在转换时很简单,都可以通过括号括起来即可,因为他们的底层都是一个类型的。使用type (a)这种形式来进行强制类型转换,比如var a int32 = 10var b int64 = int64(a)常用的还有int和string之间的相互转换,这种就没法直接用type()转换方式了。最常用的还是st...原创 2020-12-05 14:24:04 · 2551 阅读 · 0 评论 -
golang gorm使用心得小结,持续更新
官方文档:http://gorm.book.jasperxu.com1,目前暂不支持批量插入数据,可以用SQL语句直接执行或循环单次create。但因为业务需要知道插入后的主键ID,所以只能循环新增,循环新增后可通过.操作取ID。如:err = db.Create(m).Errorif err != nil { return }id = m.ID2,删除数据分为软删除和硬删除。软删即改变数据状态为删除但不从表中删除,如果表中有deleted_at字段(结构体中的DeletedA原创 2020-12-05 13:58:05 · 1314 阅读 · 0 评论 -
golang 之 复杂json结构体的生成和unmarshal解析
{ "metadata": { "timestamp_utc": "2020-11-27 12:26:19", "music": [ { "label": "华研国际音乐", "play_offset_ms": 39180, "result_from": 3, "external_ids": { .原创 2020-12-05 13:26:45 · 2819 阅读 · 0 评论 -
golang遍历数组时,不同的赋值方式性能会不一样吗?
事情的经过是今天发现一个同事写代码的风格和我们平常的不一样,直接用索引赋值给新的数组,他说这样性能更高,我当时是不信的,所以立马就写了代码来测试了一下。测试demo如下: //构造1000000个数据 type T struct { a int b string } a := T{77, "Sunset Strip"} list:=make([]T,1000000) for i:=0;i<1000000;i++{ list[i]=a } 比如说原创 2020-11-02 20:04:44 · 1131 阅读 · 1 评论 -
go语言中内置打印函数print,println和fmt包中fmt.Print,fmt.Println的区别
print和println 在golang中 是属于输出到标准错误流中并打印,官方不建议写程序时候用它,可以在debug时候用,而且后期不保证是否会继续保留。而fmt.Print,fmt.Println属于官方包fmt中自带的打印方法,在golang中 是属于标准输出流,一般使用它来进行屏幕输出.在这之前先介绍一下printf方法:"fmt"包中的"Printf"函数的 完整说明如下: Printf(format string, v ...) (n int, errn原创 2020-11-02 15:48:00 · 8307 阅读 · 0 评论 -
golang errgroup的用法及用处
一般在golang 中想要并发运行业务时会直接开goroutine,关键字go ,但是直接go的话函数是无法对返回数据进行处理error的。解决方案:## 初级版本:一般是直接在出错的地方打入log日志,将出的错误记录到日志文件中,也可以集合日志收集系统直接将该错误用邮箱或者办公软件发送给你如:钉钉机器人+graylog.## 中级版本当然你也可以自己在log包里封装好可以接受channel。利用channel通道,将go中出现的error传入到封装好的带有channel接受器..转载 2020-10-12 10:49:56 · 10199 阅读 · 0 评论 -
grpc生成pb.go文件报错github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
今天准备写个grpc接口,然后看了文档准备开始写proto文件,写完之后打算生成对应的pb.go文件。然后就报了这么一个错误:github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.看字面意思很简单,就是文件没找到。然而,我的pkg中明明是有这个文件的,带不带版本号是不影响的。然后进过一系列的摸索和请教终于找到了解决办法!关掉你的module自动同步:go env -w GO111MODULE=off.原创 2020-09-25 18:56:14 · 4110 阅读 · 3 评论 -
这是我见过写的最清晰易懂的关于go context的文章
转自:https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-context/6.1 上下文 Context上下文context.Context是用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与 Goroutine 有比较密切的关系。context.Context是 Go 语言中独特的设计,在其他编程语言中我们很少见到类似的概念。context.Context是 Go 语言在 1.7 版...转载 2020-09-10 20:25:18 · 260 阅读 · 0 评论 -
Go语言学习 之 Validate验证器用法速查
刚从PHP转过来写了几天时间的go,感觉其最大的特点就是强类型。不仅仅是对变量类型的限制很强,其对每个结构体定义的字段类型限制也很强,这就会导致刚入门go的同学很不习惯。比如限制一个字段的值为大于10的int类型,而你传了个9就会报错。当然这样也有一个好处就是对于参数校验不用另外写条件来判断了,大大简化了入参校验。总结一下常用的验证器写法以便后续查看。Go的内置验证器有以下几大类别:(为空)必填验证 类型验证 大小、长度验证 字段值比较验证 文件验证 日期验证 字符串检查验证 其他验证原创 2020-08-21 20:32:48 · 4099 阅读 · 0 评论 -
Go语言学习 之 Golang database/sql与Gorm基础使用方法总结
Golang database/sql基础使用方法总结1,原生用法写sql语句操作db.Query可以查询多行;db.QueryRow查询特定的行。db.Exec 执行更新插入删除操作2,Gorm封装用法Gorm是个go开发人员友好的ORM库,主要包含以下功能点全功能 ORM (无限接近)关联 (Has One, Has Many, Belongs To, Many To Many, 多态)钩子 (在创建/保存/更新/删除/查找之前或之后)预加载事务复合主键SQL 生成器数据原创 2020-08-21 20:07:46 · 2520 阅读 · 0 评论 -
Go语言学习 之 Go环境搭建、环境变量释义及代码目录结构(一)
接触一门新的语言首先就要搭建环境,而新手在搭建的时候往往会遇到很多问题,看到网上的搭建教程各式各样往往不知道要按哪个搭建,真是太难了。要完成环境的搭建首先还是要搞清楚搭建中的理论知识,知道这些环境变量为什么要配置,配置了会产生什么样的效果。下面我总结一下我搭建过程中遇到的问题,本文不会详细介绍搭建步骤,更偏重理论知识,如有错误欢迎指出,相互学习。Go及Goland安装Go安装及配置:可参考:https://blog.csdn.net/zxy_666/article/details/80182原创 2020-08-09 12:30:56 · 446 阅读 · 0 评论