基础知识
weishunuan
可以不会,但是不能不学
展开
-
记录一次 git的使用 回滚以及重新merge
git 的使用原创 2023-03-06 11:21:23 · 1454 阅读 · 0 评论 -
go errgroup.group
在go的并发情况下,我们可能会经常用到的一个数据类型:sync.WaitGroup;经常用到的方法也是 Add,Done,Wait。可以看到,这个升级版是包含 waitgroup的,所以升级版也是能使用waitgroup的方法,恰好今天记录一个waitGroup的升级版errgroup.group。我们在看一个简单使用:官网上的。差不多了,看完在讨论。原创 2022-12-27 17:20:51 · 364 阅读 · 0 评论 -
记录一次正则匹配的使用
【代码】记录一次正则匹配的使用。原创 2022-11-17 10:15:47 · 111 阅读 · 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 · 729 阅读 · 0 评论 -
我准备接触一下 im了
先把文档 记录一下。原创 2022-10-25 16:59:00 · 95 阅读 · 0 评论 -
go 蛇形 驼峰 转换
【代码】go 蛇形 驼峰 转换。转载 2022-09-13 15:53:13 · 665 阅读 · 0 评论 -
go 读取邮件
【代码】go 读取邮件。原创 2022-08-22 18:02:25 · 2532 阅读 · 13 评论 -
go dig
大家都知道,java有很多的依赖注入库,而且依赖注入的强大的sprig有更多使用的地方,这就是基本的用法,还有什么dig.out我没搞,先打开思路,,然后再深入。大体记载一下go的依赖注入库 dig,它是uber的开源库。直接上一个简单的例子提供大家打开思路。...原创 2022-08-04 15:35:18 · 385 阅读 · 0 评论 -
修改mysql root用户 无密码登录
mysql 修改root用户无密码登录原创 2022-08-03 17:27:52 · 733 阅读 · 0 评论 -
踩坑日志:dokcer安装部署、配置、go程序链接、Mongo
go mongo原创 2022-06-17 13:43:53 · 144 阅读 · 0 评论 -
记录:go的path 包
随手记录一下,go的path 包的用法直接看代码你 执行一下,看看原创 2022-06-16 10:29:28 · 210 阅读 · 0 评论 -
踩坑日志:mac安装nginx,并且搭建静态文件服务,且配置口令
安装:对我来说,安装路径我基本就不动他了我们直接去修改配置文件这是我的配置文件保存并退出文件后,然后启动nginx打开自己的浏览器,直接访问:127.0.0.1:9090就会看到相对应的提示了对于:htpasswd 的命令...原创 2022-06-09 16:18:33 · 694 阅读 · 0 评论 -
踩坑日志:使用websocket,并发的传输文件(服务器之间)
这功能不要问,问就是项目需求直接上代码client还有就是 proto的文件记得protoc 一下原创 2022-06-08 16:40:24 · 1169 阅读 · 0 评论 -
踩坑日志:go并发读取文件
我的应用场景是:并发的读取一个文件(或者一个超大的文件),计算文件的hash值,就比如:文件60G,你的内存4G,如何计算?这个例子是不是不太可能实现:这是平常的方法,对于超大文件是肯定不合适的好了 ,直接上代码,这是我做的,可能有点小瑕疵,待解决,大神们也可直接指点迷津~~~...原创 2022-06-08 10:07:39 · 1096 阅读 · 0 评论 -
mac 安装 jmeter
注意:安装jmeter 需要java的环境,因为我本地已经安装了jdk,所以直接跳过,直接安装jmeter如果需要大家再去找安装方法,有很多https://jmeter.apache.org/download_jmeter.cgi先去官网,下在一个jmeter的压缩包我下载的是:找一个你喜欢的文件夹,解压你刚才下载的压缩包,同时获取路径我比较懒,直接放在了download下配置环境变量我的环境变量习惯放在 ~/.bash_profile 文件中这里要说一点,这个路径的获取JAVA_HOME,直接运原创 2022-06-02 11:05:57 · 234 阅读 · 0 评论 -
踩坑日志 : linux 安装指定版本的docker:
先直接上操作步骤:sudo apt updatesudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository “deb [arch=amd64] https://downl原创 2022-05-26 15:34:26 · 715 阅读 · 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 · 152 阅读 · 0 评论 -
hashcat mac安装步骤
1.找一个自己的喜欢的地方,创建一个hahcat的文件夹2.github 找到源码 直接clonegit clone https://github.com/hashcat/hashcat.git3.cd 进入 clone的文件4.执行 make5.在当前目录中 有一个hashcat 可执行文件,将它放到你的相对应的bin目录下,也可以配置环境变量6.重新打开一个终端7.执行。hashcat --version 看看会不会出现hahscat的版本8,执行:hashcat -a 3 --for原创 2022-05-17 14:09:38 · 3489 阅读 · 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 · 621 阅读 · 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 · 6728 阅读 · 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 · 122 阅读 · 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 · 288 阅读 · 0 评论 -
TCP链接,为什么要三次握手?
昨天面试,面试官问:为什么TCP建立连接时需要第三次握手讲真的,我不知道,我真的不知道,然后就有了这篇文章,简单记载一下简单随笔,不喜勿喷Tcp的定义以及如何连接的我在这就不记了直接上为什么?原因一:防止重复链接防止旧的重复链接引起链接混乱比如:一个网络很乱的环境,如果只有两次握手,那分不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是新的请求还可以,但是如果是旧的链接发送的超时链接请求呢?原因二:同步初始化序列化防止数据包重复发送,以及确定数据包接受时的顺序原创 2022-04-12 10:03:30 · 3501 阅读 · 0 评论 -
Go AES的三种加密方式
因为工作需要,需要再次了解AES对称加密的使用在此,我想说一句,在写一些接口尤其是对接接口的时候,有一些算法,不要用一些封装好的第三方包,这样会给对接非常大的阻碍,就使用最基本的原始包,去实现这个逻辑,这样的话,即使是对接,阻碍也会非常小举例:Aes 加密方式,如果你直接使用第三方封装好的包,直接进行AES加密,跟就不知道她是使用什么格式,等别的用户来对接时,如果用户使用的语言和你一样,那OK,直接复制粘贴,但是如果语言不一样怎么办?是不是?所以,广大的程序员朋友啊,自己不对外的接口,想怎么玩怎么玩,如转载 2022-02-23 11:06:29 · 3617 阅读 · 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 · 160 阅读 · 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 · 3393 阅读 · 0 评论 -
go kit (10) router-options
这个kit的项目,基本的搭建基本都完成了,这次我们找一下之前一个可有可恶的参数然后将这个参数,研究了解一下我们这次就看这个函数,这个是项目中,router中的一个,kit的http包,创建的一个http的服务我们这样的用法是比较基本的,一个中间件,一个业务出溜 函数,一个入参解析,一个出参封装,其实这个函数还有一个不定参数,我们来瞅瞅这个是,这个函数源码,我们来看一下他的不定参数这个是,为服务器设置 参数,画重点了啊,服务器!!客户端,这个地方是没的配置的;我们继续这个参数在goK原创 2022-01-05 13:45:16 · 194 阅读 · 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 · 337 阅读 · 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 · 385 阅读 · 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 · 295 阅读 · 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 · 2317 阅读 · 0 评论 -
使用go实现Aes加解密
package encryptimport ( "bytes" "crypto/aes" "crypto/cipher" "encoding/hex")const ( MYKEY = "oingtx47safd756s" //十六字节密匙 IV = "mhytanglki872345" //CBC模式的初始化向量:与key等长:十六字节)// 注:输入输出都直接是字符串//使用aes进行对称加密func Aes_Encrypt(ss string) string {原创 2021-12-06 14:35:23 · 639 阅读 · 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 · 517 阅读 · 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 · 222 阅读 · 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 · 154 阅读 · 0 评论 -
go kit (2)
承接上一篇文章,我们继续了解kit,真的,需要理解他们的定义,要不然看起来很费劲,我就是一个很标准的范例,不了解,强行看,一头蒙,不说了,继续kit。有这几个模块:transport,endpoint,service我们一个一个解释来看transport简单来讲,这个东西就是一个输入输出的规范,简单来讲,方向一入参:我们和在这里解析自己接口所需要的参数,比如说,一个get请求,请求地址拼接手机号,发送过来了,那我们可以直接在transpoet层,解析到这个手机号,然后往下endpoint层传递,原创 2021-10-28 19:12:33 · 108 阅读 · 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 · 279 阅读 · 0 评论 -
简单聊一下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 · 168 阅读 · 0 评论 -
git 归纳
简单整理一下,工作中 可以用到的Git命令我的上传原创 2020-12-24 11:43:53 · 94 阅读 · 0 评论