go
weishunuan
可以不会,但是不能不学
展开
-
go errgroup.group
在go的并发情况下,我们可能会经常用到的一个数据类型:sync.WaitGroup;经常用到的方法也是 Add,Done,Wait。可以看到,这个升级版是包含 waitgroup的,所以升级版也是能使用waitgroup的方法,恰好今天记录一个waitGroup的升级版errgroup.group。我们在看一个简单使用:官网上的。差不多了,看完在讨论。原创 2022-12-27 17:20:51 · 378 阅读 · 0 评论 -
记录一次正则匹配的使用
【代码】记录一次正则匹配的使用。原创 2022-11-17 10:15:47 · 130 阅读 · 0 评论 -
记录一个问题:goland 配置goROOT的问题 -本地安装了,但是无法选择
可能需要 切换到root用户或者直接 sudo vim /usr/local/go/src/runtime/internal/sys/zversion.go。低版本的goland还需要配置GOROOT,但是在配置go1.17以上的时候就一直报这个错误。编辑/usr/local/go/src/runtime/internal/sys/zversion.go。直接修改保存,然后重启 golang在进行选择 就OK了。找到go的安装路径,我的是/usr/local/go。增加 相对于的版本号。原创 2022-11-07 17:07:15 · 750 阅读 · 0 评论 -
我准备接触一下 im了
先把文档 记录一下。原创 2022-10-25 16:59:00 · 102 阅读 · 0 评论 -
go 对象切片排序
根据对象其中的一个参数,进行排序。对 对象切片 进行排序。原创 2022-10-10 16:34:14 · 166 阅读 · 0 评论 -
go 蛇形 驼峰 转换
【代码】go 蛇形 驼峰 转换。转载 2022-09-13 15:53:13 · 676 阅读 · 0 评论 -
go 读取邮件
【代码】go 读取邮件。原创 2022-08-22 18:02:25 · 2569 阅读 · 13 评论 -
go dig
大家都知道,java有很多的依赖注入库,而且依赖注入的强大的sprig有更多使用的地方,这就是基本的用法,还有什么dig.out我没搞,先打开思路,,然后再深入。大体记载一下go的依赖注入库 dig,它是uber的开源库。直接上一个简单的例子提供大家打开思路。...原创 2022-08-04 15:35:18 · 393 阅读 · 0 评论 -
踩坑日志:dokcer安装部署、配置、go程序链接、Mongo
go mongo原创 2022-06-17 13:43:53 · 152 阅读 · 0 评论 -
记录:go的path 包
随手记录一下,go的path 包的用法直接看代码你 执行一下,看看原创 2022-06-16 10:29:28 · 219 阅读 · 0 评论 -
踩坑日志:mac安装nginx,并且搭建静态文件服务,且配置口令
安装:对我来说,安装路径我基本就不动他了我们直接去修改配置文件这是我的配置文件保存并退出文件后,然后启动nginx打开自己的浏览器,直接访问:127.0.0.1:9090就会看到相对应的提示了对于:htpasswd 的命令...原创 2022-06-09 16:18:33 · 711 阅读 · 0 评论 -
踩坑日志:使用websocket,并发的传输文件(服务器之间)
这功能不要问,问就是项目需求直接上代码client还有就是 proto的文件记得protoc 一下原创 2022-06-08 16:40:24 · 1229 阅读 · 0 评论 -
踩坑日志:go并发读取文件
我的应用场景是:并发的读取一个文件(或者一个超大的文件),计算文件的hash值,就比如:文件60G,你的内存4G,如何计算?这个例子是不是不太可能实现:这是平常的方法,对于超大文件是肯定不合适的好了 ,直接上代码,这是我做的,可能有点小瑕疵,待解决,大神们也可直接指点迷津~~~...原创 2022-06-08 10:07:39 · 1125 阅读 · 0 评论 -
go 学习之路 - 一个内存分配问题
Go 1.15 中 var i interface{} = a 会有额外堆内存分配吗?具体代码是:var a int = 3// 以下有额外内存分配吗?var i interface{} = a答案解析在 Go 中,接口被实现为一对指针(请参阅 Russ Cox 的 Go 数据结构:接口):指向有关类型信息的指针和指向值的指针。可以简单的表示为:type iface struct {tab *itabdata unsafe.Pointer}其中 tab 是指向类型信息的指针;dat原创 2022-05-17 17:35:05 · 157 阅读 · 0 评论 -
go build 的一些基础知识
临时,也就是一次性的我的是mac本,英特尔的cup这个是:go build 项目 ,可以在linux 环境下执行env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goenv CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go临时指定编译build环境你也可以进行修改环境变量进行编译1.mac的环境下$ go env -w CGO_ENABLED=0 GOOS=linux原创 2022-05-16 15:39:44 · 629 阅读 · 0 评论 -
go mod 使用时的问题(指定版本)
先简单描述一下问题:现在,我在开发go的项目中,用到了两个包 A@v1.1 和 B@v3.1,此时这两个包是可以相互支持的;两天后(就是这个意思不一定真的是两天还有可能是两个月),A版本更新了,A@v1.3了,B的版本依然没有更新;而且A@v1.3与B@v3.1 不相互支持了,此时我们在项目中 进行 go mod tidy的时候,就会把最A的新的版本down下来,项目就会报错;我们需要解决的问题就是,在使用go mod 的时候,指定在我们所需要的版本,不让他们随意更新我们进行 go mod init原创 2022-05-12 10:09:12 · 6968 阅读 · 0 评论 -
go 字符串的高效拼接
我们都知道 + 链接但是不高效func BuildString(pieces ...string) string { var strBuf bytes.Buffer for _, piece := range pieces { strBuf.WriteString(piece) } return strBuf.String()}试试这个方法原创 2022-05-11 14:08:12 · 189 阅读 · 0 评论 -
Go map的key,为什么是无序的?
生命不息,战斗不止兄弟们干了~!!奥利给 ~!!map 在扩容后,会发生 key 的搬迁,原来落在同一个 bucket 中的 key,搬迁后,有些 key 就要远走高飞了(bucket 序号加上了 2^B)。而遍历的过程,就是按顺序遍历 bucket,同时按顺序遍历 bucket 中的 key。搬迁后,key 的位置发生了重大的变化,有些 key 飞上高枝,有些 key 则原地不动。这样,遍历 map 的结果就不可能按原来的顺序了。当然,如果我就一个 hard code 的 map,我也不会向 ma转载 2022-05-05 09:58:00 · 467 阅读 · 0 评论 -
go 数组、切片、for range 的知识点
让我们直接上代码1func main() { var a = [5]int{1, 2, 3, 4, 5} var r [5]int for i, v := range a { if i == 0 { a[1] = 12 a[2] = 13 } r[i] = v } fmt.Println("r = ", r) fmt.Println("a = ", a)}问: 输出是什么??涉及到的知识点:for range 循环 会拷贝数组与切片之间的联系原创 2022-04-26 13:48:49 · 127 阅读 · 0 评论 -
Go defer,recover;的问题
今天遇到一个问题,记录一下,直接上代码package mainimport "fmt"func f(n int) (r int) { defer func() { r += n recover() }() var f func() defer f() f = func() { r += 2 } return n + 1}func main() { fmt.Println(f(3))}提问: 输出多少??原创 2022-04-25 10:49:26 · 294 阅读 · 0 评论 -
Go AES的三种加密方式
因为工作需要,需要再次了解AES对称加密的使用在此,我想说一句,在写一些接口尤其是对接接口的时候,有一些算法,不要用一些封装好的第三方包,这样会给对接非常大的阻碍,就使用最基本的原始包,去实现这个逻辑,这样的话,即使是对接,阻碍也会非常小举例:Aes 加密方式,如果你直接使用第三方封装好的包,直接进行AES加密,跟就不知道她是使用什么格式,等别的用户来对接时,如果用户使用的语言和你一样,那OK,直接复制粘贴,但是如果语言不一样怎么办?是不是?所以,广大的程序员朋友啊,自己不对外的接口,想怎么玩怎么玩,如转载 2022-02-23 11:06:29 · 3739 阅读 · 6 评论 -
go kit (11) DB
kit 工具包的功能以及应用基本OK了我今天完善一下数据库连接的封装吧,项目中肯定是要用到的,以mysql为例我使用的是: “github.com/jinzhu/gorm”这个东西看个人习惯,用哪个不是最重要的,只要能正常使用的就可以开始:链接字符串 “root:123456@tcp(127.0.0.1:3306)/test”)这个都没问题吧新增:代码地址:https://gitee.com/weishunuan_163com/go...原创 2022-01-14 10:13:24 · 170 阅读 · 0 评论 -
go 获取http请求中的ip地址
之前也是简单记载了一下获取http中的ip地址这是之前的文章https://blog.csdn.net/shunuanwei/article/details/121746761?spm=1001.2014.3001.5501这次,我突然想到这个地方 ,我在仔细研究一下,或者说,在调整一下代码嗯~~import "net/http"// 获取请求中的IPfunc RemoteIp(req *http.Request) string { var remoteAddr string // R原创 2022-01-10 17:41:02 · 3412 阅读 · 0 评论 -
go kit (10) router-options
这个kit的项目,基本的搭建基本都完成了,这次我们找一下之前一个可有可恶的参数然后将这个参数,研究了解一下我们这次就看这个函数,这个是项目中,router中的一个,kit的http包,创建的一个http的服务我们这样的用法是比较基本的,一个中间件,一个业务出溜 函数,一个入参解析,一个出参封装,其实这个函数还有一个不定参数,我们来瞅瞅这个是,这个函数源码,我们来看一下他的不定参数这个是,为服务器设置 参数,画重点了啊,服务器!!客户端,这个地方是没的配置的;我们继续这个参数在goK原创 2022-01-05 13:45:16 · 203 阅读 · 0 评论 -
go kit (9) 配置文件的读取
承接上文,想到的地方,就是配置文件的自定义以及读取嗯~~,没什么可以多说的,我这使用的配置文件的格式 yaml使用到的包:“gopkg.in/yaml.v2”直接上代码:package globalimport ( "gopkg.in/yaml.v2" "io/ioutil")var SystemConfig *Configfunc LoadConfig(configFile string) error { // 读取 yaml 配置文件 c, err := ioutil.Re原创 2021-12-29 15:26:53 · 344 阅读 · 0 评论 -
go kit (8) log
上文写了关于跨域的部分问题,跨域的进一步设置,今天先不书写,我们今天需要看一下log中间件的使用首先在global文件夹下创建log.go文件我在这选用的log的包是logrus,这个东西其实都一样。log,就看你自己喜欢使用哪一个,package globalimport ( "bytes" "fmt" "github.com/sirupsen/logrus" "io" "os" "path/filepath" "time")// 初始化logfunc InitLogger原创 2021-12-28 13:56:09 · 389 阅读 · 0 评论 -
go slice 切片
简记:go的一个切片问题今天这开发过程中遇到的一个问题,然后展开研究一下,关于切片的好多属性,我们今天在这就不仔细记录了,有问题可以研究一下大神的文章 :https://halfrost.com/go_slice/我们直接上带代码:我们带着问题研究问题:情况一: // s2 是从s1截取的一部分,,执行 之后,问 s1 的 第一个元素会不会 改变? // 为什么?func Test_2(t *testing.T) { s1:=[]int{2,4,6,7} s2 := s1[0:3]原创 2021-12-09 14:00:24 · 303 阅读 · 0 评论 -
go IP地址的操作
随记一下,开发过程中,对于IP地址的操作package ipimport ( "fmt" "math/big" "net" "net/http" "regexp")// 获取 ip 地址func RemoteIp(req *http.Request) string { remoteAddr := req.Header.Get("Remote_addr") if remoteAddr == "" { if ip := req.Header.Get("ipv4"); ip !=原创 2021-12-06 14:46:41 · 2341 阅读 · 0 评论 -
go kit (6) -完善中间件 jwt
上一篇文章,已经大体讲解了如何使用中间件,我们是以jwt为例,但是没有完善其中的jwt的校验逻辑,所以,我们的这一篇文章就来完善这一部分我们先看昨天完成的代码func JwtMiddleware() endpoint.Middleware { return func(e endpoint.Endpoint) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (response interface{},原创 2021-12-02 15:11:35 · 523 阅读 · 0 评论 -
go kit (4)
今天,我们继续完善go kit ;今天添加两个小模块一:优雅退出程序,为将来的consul使用做铺垫二:router 路由的拆分我们首先看一:优雅的推出程序,其实这和不能算是kit里的功能。这个做法在其他程序中,也是可行的,在这就简单的拿出来,简单一说,直接配置使用:如下就是配置完成的main 方法,在程序结束运行时,可以监听到,但是有个问题是debug的环境下,好像监听不到,大家可以试试import ( "fmt" goKitHttp "github.com/go-kit/kit/tran原创 2021-11-25 14:00:13 · 230 阅读 · 0 评论 -
go kit (3)
我们进今天开始,构建项目一:我们先将项目的初始架构,搞起来如上图所示,先创建一些空的go文件,文件名可以随便起,但是文件夹的名字最好先用这么写,因为一开始自己对kit的不是完全理解,包名在此还有一定的提示作用二: 我们先从最基本的service开始构建codeService.goimport "fmt"type User struct {}func (u *User) GetUserName(uid int) string { fmt.Println(uid) return原创 2021-11-02 20:02:31 · 159 阅读 · 0 评论 -
go kit (2)
承接上一篇文章,我们继续了解kit,真的,需要理解他们的定义,要不然看起来很费劲,我就是一个很标准的范例,不了解,强行看,一头蒙,不说了,继续kit。有这几个模块:transport,endpoint,service我们一个一个解释来看transport简单来讲,这个东西就是一个输入输出的规范,简单来讲,方向一入参:我们和在这里解析自己接口所需要的参数,比如说,一个get请求,请求地址拼接手机号,发送过来了,那我们可以直接在transpoet层,解析到这个手机号,然后往下endpoint层传递,原创 2021-10-28 19:12:33 · 114 阅读 · 0 评论 -
go 颜色输出
突发奇想,日志输出的时候,我想用颜色进行一下区分func main() { for b := 40; b <= 47; b++ { // 背景色彩 = 40-47 for f := 30; f <= 37; f++ { // 前景色彩 = 30-37 for d := range []int{0, 1, 4, 5, 7, 8} { // 显示方式 = 0,1,4,5,7,8 fmt.Printf(" %c[%d;%d;%dm%s(f=%d,b=%d,d=%d)%c[0m "原创 2021-10-28 15:02:00 · 289 阅读 · 0 评论 -
go kit 使用(1)
在挣扎中前行~~下载kit 的工具$ go get github.com/kujtimiihoxha/kit在gopath 的src下,执行 kit new service UserService,创建一个 用户服务补全service.go6.package serviceimport ( "context" "github.com/money-hub/MoneyDodo.service/model")// UserService describes the servic原创 2021-09-17 13:30:51 · 481 阅读 · 0 评论 -
go 查找一个字符串切片中,是否包含某一个字符串
直接干货,上代码:// true=存在。false=不存在func IsHave(target string, str_array []string) bool { sort.Strings(str_array) index := sort.SearchStrings(str_array, target) //index的取值:0 ~ (len(str_array)-1) return index < len(str_array) && str_array[index] =原创 2021-08-20 15:47:50 · 1998 阅读 · 3 评论 -
简单聊一下go中的 for.range
这个代码块我相信大家都用的次数很多,但是这个代码块存在一个已知的问题,大家是不是经常忽略,哈哈,我也是掉进了坑里,爬出来之后,来总结一下,大家看看,别再进坑了~~~~ for key,value := range XXX{ }可以先看一下,这个例子,思考一下,输出的值func main() { arr1 := []int{1, 2, 3} arr2 := make([]*int, len(arr1)) for i, v := range arr1 { arr2[i] =原创 2021-08-16 11:15:50 · 174 阅读 · 0 评论 -
GO:go build 和 go install 的区别
首先确定可以确定一点的是:无论是go build 还是go install,都是会生成可执行文件如果都是无参数运行,都会在当前目录下编译,但是如果是在主程序的目录下执行:build:会在当前目录中生成可执行文件install:会将文件放到$GOPATH/BIN中,同时也会把导入的依赖包编译到 $GOPATH/pkg,并缓存,如果包未做更改,下次编译则直接使用缓存。 go build 命令加参数 -i 也能达到go install 的效果。如果当前目录是非主包,则go install 直接把编译结果安原创 2021-07-30 14:19:53 · 561 阅读 · 0 评论 -
go和java,共通的AES加密实现
起因:因为工程需要,需要实现go和Java实现这AES加密共通可以提供AES加密的密钥,是随机生成的字符串,所以在使用时,需要处理一下java代码import org.apache.commons.codec.digest.DigestUtils;import java.net.URLEncoder;import java.security.GeneralSecurityException;import java.util.Arrays;import java.util.Base64;im原创 2021-06-22 14:40:35 · 1353 阅读 · 4 评论 -
go连接mysql 相差8小时 设置&loc=Local不生效问题
在这里,做一个简单的问题记录:connStr := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&loc=Local", conf.DB.UserName, conf.DB.UserPasswd, conf.DB.DbIP, conf.DB.DbPort, conf.DB.DbName)问题: 为什么&loc=Local不生效?答:少了一段配置:&parseTime=True connStr := fmt.Sprintf("原创 2021-04-27 15:03:50 · 1580 阅读 · 13 评论 -
go time.NewTicker
go time.NewTicker今天学习,做一下笔记,也留一个问题,大家可以试着解决一下func main() { tk := time.NewTicker(time.Second) a := 0 in := make(chan int, 1) go func() { for true { <-tk.C a++ if a >= 5 { in <- 9 } fmt.Println(a) } }() for true {原创 2020-12-23 14:49:23 · 1107 阅读 · 0 评论