- 博客(79)
- 资源 (5)
- 收藏
- 关注
原创 golang的docker 简单部署
1 首先创建一个docker的网络,将这三个容器全部放入这个网段中,他们才可以通过内网访问,可能会有人问,为什么不使用外网,这个原因有很多,就不一一说了,就说一个,对于mysql和redis,我只需要他们的入口只有一个,那就是go程序。我就是想单独的创建三个docker,然后链接使用,就是go可以链接mysql和redis。先看一下你现已有,已存在的docker网络,如果有空余的bridge,就不用创建了。如果你的容器已经启动了,但是没有加入到网络中 也没事,使用。可以在容器启动时,指定加入的网络,使用。
2024-02-20 10:34:38 601
原创 go中如何判断一个channel是否关闭
这是一个很简单的方法,但是我在此之前竟然忘记了,但是也确实是在我的项目经历中关于这个chan我从来也没有关闭过,我的经历是只要程序在运行,我的chan就在一直运行,没有关闭过,也就没有了解过这个小方法。我也知道,如果一个chan关闭了,直接去读取数据如果有数据就是数据没有数据就是默认值,但是不能写,写入就是panic;如果有一个有缓冲的chan在写入数据之后,关闭了,再去读取数据是可以读取出来的。一个没有缓冲的chan写入等待数据,关闭,然后也是可以读出这个代写入的数据的,
2023-12-18 10:15:19 276
转载 ETCD的简单服务发现
大神的原文:https://blog.csdn.net/feizaoSYUACM/article/details/108125460。我是使用docker启动的单机etcd,具体配置如下。记得使用gomod 来管理项目,
2023-05-09 15:28:30 193 1
原创 go errgroup.group
在go的并发情况下,我们可能会经常用到的一个数据类型:sync.WaitGroup;经常用到的方法也是 Add,Done,Wait。可以看到,这个升级版是包含 waitgroup的,所以升级版也是能使用waitgroup的方法,恰好今天记录一个waitGroup的升级版errgroup.group。我们在看一个简单使用:官网上的。差不多了,看完在讨论。
2022-12-27 17:20:51 335
原创 记录一个问题: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 614
原创 go dig
大家都知道,java有很多的依赖注入库,而且依赖注入的强大的sprig有更多使用的地方,这就是基本的用法,还有什么dig.out我没搞,先打开思路,,然后再深入。大体记载一下go的依赖注入库 dig,它是uber的开源库。直接上一个简单的例子提供大家打开思路。...
2022-08-04 15:35:18 350
原创 踩坑日志:mac安装nginx,并且搭建静态文件服务,且配置口令
安装:对我来说,安装路径我基本就不动他了我们直接去修改配置文件这是我的配置文件保存并退出文件后,然后启动nginx打开自己的浏览器,直接访问:127.0.0.1:9090就会看到相对应的提示了对于:htpasswd 的命令...
2022-06-09 16:18:33 644
原创 踩坑日志:使用websocket,并发的传输文件(服务器之间)
这功能不要问,问就是项目需求直接上代码client还有就是 proto的文件记得protoc 一下
2022-06-08 16:40:24 913
原创 踩坑日志:go并发读取文件
我的应用场景是:并发的读取一个文件(或者一个超大的文件),计算文件的hash值,就比如:文件60G,你的内存4G,如何计算?这个例子是不是不太可能实现:这是平常的方法,对于超大文件是肯定不合适的好了 ,直接上代码,这是我做的,可能有点小瑕疵,待解决,大神们也可直接指点迷津~~~...
2022-06-08 10:07:39 887
原创 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 213
原创 踩坑日志 : 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 684
原创 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 130
原创 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 3118
原创 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 567
原创 go mod 使用时的问题(指定版本)
先简单描述一下问题:现在,我在开发go的项目中,用到了两个包 [email protected] 和 [email protected],此时这两个包是可以相互支持的;两天后(就是这个意思不一定真的是两天还有可能是两个月),A版本更新了,[email protected]了,B的版本依然没有更新;而且[email protected]与[email protected] 不相互支持了,此时我们在项目中 进行 go mod tidy的时候,就会把最A的新的版本down下来,项目就会报错;我们需要解决的问题就是,在使用go mod 的时候,指定在我们所需要的版本,不让他们随意更新我们进行 go mod init
2022-05-12 10:09:12 5465
原创 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 162
转载 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 426
原创 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 111
原创 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 266
原创 TCP链接,为什么要三次握手?
昨天面试,面试官问:为什么TCP建立连接时需要第三次握手讲真的,我不知道,我真的不知道,然后就有了这篇文章,简单记载一下简单随笔,不喜勿喷Tcp的定义以及如何连接的我在这就不记了直接上为什么?原因一:防止重复链接防止旧的重复链接引起链接混乱比如:一个网络很乱的环境,如果只有两次握手,那分不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是新的请求还可以,但是如果是旧的链接发送的超时链接请求呢?原因二:同步初始化序列化防止数据包重复发送,以及确定数据包接受时的顺序
2022-04-12 10:03:30 3449
转载 Go AES的三种加密方式
因为工作需要,需要再次了解AES对称加密的使用在此,我想说一句,在写一些接口尤其是对接接口的时候,有一些算法,不要用一些封装好的第三方包,这样会给对接非常大的阻碍,就使用最基本的原始包,去实现这个逻辑,这样的话,即使是对接,阻碍也会非常小举例:Aes 加密方式,如果你直接使用第三方封装好的包,直接进行AES加密,跟就不知道她是使用什么格式,等别的用户来对接时,如果用户使用的语言和你一样,那OK,直接复制粘贴,但是如果语言不一样怎么办?是不是?所以,广大的程序员朋友啊,自己不对外的接口,想怎么玩怎么玩,如
2022-02-23 11:06:29 3366 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 142
原创 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 3342
原创 go kit (10) router-options
这个kit的项目,基本的搭建基本都完成了,这次我们找一下之前一个可有可恶的参数然后将这个参数,研究了解一下我们这次就看这个函数,这个是项目中,router中的一个,kit的http包,创建的一个http的服务我们这样的用法是比较基本的,一个中间件,一个业务出溜 函数,一个入参解析,一个出参封装,其实这个函数还有一个不定参数,我们来瞅瞅这个是,这个函数源码,我们来看一下他的不定参数这个是,为服务器设置 参数,画重点了啊,服务器!!客户端,这个地方是没的配置的;我们继续这个参数在goK
2022-01-05 13:45:16 183
原创 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 316
原创 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 337
原创 go kit (7) 跨域问题
ok 我们今天解决一下,请求跨域问题我们都知道啊,跨域问题,是可以在nginx中进行配置的,但是呢,我们的程序中也是可以进行设置,而且前后端也都是可以进行设置,记得我之前发过的一篇文章,大体解释了一下跨域的问题,可以翻翻看看,今天我们将在kit 中,进行跨域的设置因为kit 不是框架,所以kit没有所谓的针对跨域设置的封装,我们先看几个框架的跨域设置我们熟悉的go 的框架:gin。iris先看gin:package mainimport ( "github.com/gin-gonic/
2021-12-14 10:59:03 2935
原创 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 282
原创 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 2248
原创 使用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 605
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人