![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 53
katy的小乖
不断学习
展开
-
使用golang pprof进行性能分析
golang pprof,说实话自己还一次都没有实际操作过。最近这几天的需求恰好需要分析下一个看似很简单的服务,内存配置上限是900m,最终在大量并发的时候出现oom的情况。代码准备首先代码需要支持pprof才行。在main.go中引入_ "net/http/pprof"这个内存分析我加了个开关,是否需要借助pprof进行内存分析,如果enablePprof为true则进行pprof分析,另外pprof分析的端口暴露为7070(都是可以随意指定的,只要不与住程序端口冲突即可)原创 2022-01-11 12:17:58 · 1408 阅读 · 0 评论 -
grpc client No connection could be made because the target machine actively refused it
grpc client No connection could be made because the target machine actively refused it禁用防火墙查看yaml中暴露的端口与Dockerfile中暴露的端口是否一致禁用防火墙检查防火墙是否开启systemctl status firewalld如果防火墙打开,则关闭systemctl stop firewalld禁用防火墙systemctl disable firewalld查看yaml中暴露的端口与D原创 2021-06-26 14:32:25 · 859 阅读 · 0 评论 -
golang判定字符串是否存在特殊字符,并在特殊字符前添加转义符\
判断字符串是否包含特殊字符,如:~!@#$%^&*()_+}{":?><"⌘等import ( "unicode")// 如果存在特殊字符,直接在特殊字符前添加\/**判断是否为字母: unicode.IsLetter(v)判断是否为十进制数字: unicode.IsDigit(v)判断是否为数字: unicode.IsNumber(v)判断是否为空白符号: unicode.IsSpace(v)判断是否为Unicode标点字符 :unicode.IsPunct(v原创 2021-05-11 11:15:21 · 7892 阅读 · 3 评论 -
golang template(数组循环、在循环内使用外部变量、索引从1开始)
template之前也使用过,但都是一些最简单的字符串替换,但是从来没有使用过数组的循环遍历.官方文档在这:https://golang.org/pkg/text/template/。 看的云里雾里的之前做prometheus监控告警的时候为了适配各种类型的告警,把告警表达式模板抽出来了。avg by(instance,prometheus_replica) (rate(node_cpu_seconds_total{mode = 'system', instance =~ '^{{.h..转载 2021-02-02 14:59:55 · 11621 阅读 · 0 评论 -
在go mod中使用k8s.io/code-generator生成代码
准备工作- 创建项目crd- 在项目下创建pkg/apis/foo/v1目录- 在pkg/apis/foo下创建register.go- 在pkg/apis/foo/v1下创建doc.go, types.go, register.go- copy https://github.com/kubernetes/code-generator.git到$GOPATH/src/k8s.io下(我用的是release-1.16分支。如果需要特定的分支则先切换分支再继续) 1. cd 到cmd/...原创 2020-12-23 15:37:06 · 3682 阅读 · 0 评论 -
golang调用prometheus-operator api创建PromtheusRule
prometheus-operator使用PrometheusRule来代替了规则文件。每个告警规则对应一个PrometheusRule对象。所有的PrometheusRule对象会被Prometheus-Operator转换为规则文件挂载在promtheus pod内部的/etc/prometheus/rules/prometheus-k8s-rulefiles-0 目录下。package apiimport ( "errors" "fmt" operatorV1 "github.com.原创 2020-11-28 14:06:03 · 1323 阅读 · 9 评论 -
golang上传文件到ftp服务器
搭建ftp服务器installcentos7yum -y install vsftpd查看是否安装成功service vsftpd status禁用匿名登录vim /etc/vsftpd/vsftpd.conf修改anonymous_enable=YES为 anonymous_enable=NO重启ftpsystemctl restart vsftpd通过查看ftpusers 和user_list是登录的黑名单和白名单但是直接使用root竟然无法...原创 2020-10-20 21:09:08 · 2996 阅读 · 1 评论 -
docker搭建nexus服务器
拉镜像docker pull sonatype/nexus3:3.28.0运行nexus docker run -it --name nexus3 sonatype/nexus3:3.28.0 shnexus的配置文件放在cat /opt/sonatype/nexus/etc/nexus-default.properties# Jetty sectionapplication-port=8081application-host=0.0.0.0nexus-args...原创 2020-10-19 15:56:40 · 879 阅读 · 0 评论 -
golang序列化json去除转义字符
在解析一个返回值的时候,得到的json格式如下。{"volume.cloudtogo.cn/spec":"ID: \"b9aad132b4df4f07ac78896ab193b6cc\"\nMountpoint: \"/workspace\"\nCapacity: 1073741824\nNFS: \u003c\n\u003e\n"}这个json是带有转义字符的。去掉这些转义字符。根据go doc的描述,如果要禁用转义字符需要调用SetEscapeHTML(false)。// S...转载 2020-10-15 15:44:41 · 18572 阅读 · 0 评论 -
golang 字符串相似度算法
题目:一个字符串可以通过增加一个字符,删除一个字符,替换一个字符得到另外一个字符串,假设,我们把从字符串A转换成字符串B,前面3种操作所执行的最少次数称为AB相似度如abc adc度为 1 ababababa babababab 度为 2 abcd acdb 度为2字符串相似度算法可以使用 Levenshtein Distance算法(中文翻译:编辑距离算法) 这算法是由俄国科学家Levenshtein提出的。其步骤Step Description 1...原创 2020-09-11 11:16:08 · 3122 阅读 · 0 评论 -
golang net/smtp邮件发送报错:504 5.7.4 Unrecognized authentication type
报错查看当前smtp服务器的认证方式telnet 邮件服务器地址 端口echo localhost参照:http://being23.github.io/2015/09/17/%E4%BD%BF%E7%94%A8golang%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6/是由于认证方式的问题,需要支持新的认证方式...转载 2020-09-08 17:27:45 · 6308 阅读 · 1 评论 -
golang调用docker api pull/push image到私有仓库,daemon.json增加insecure-registries
目录pull没有配置/etc/docker/daemon.json配置了/etc/docker/daemon.json完整代码pushX-Registry-AuthRegistryAuth值为空RegistryAuth不为空,但是值不正确x509: certificate signed by unknown authority完整代码pull没有配置...原创 2020-04-27 19:28:47 · 5436 阅读 · 0 评论 -
golang处理[]interface
在使用prometheus的query_range接口查询metrics的时候,prometheus返回的数据格式如下{ "status" : "success", "data" : { "resultType" : "matrix", "result" : [ { "metric" : { ...原创 2020-03-23 13:58:13 · 768 阅读 · 0 评论 -
go net/http.Client 处理redirect
目录现象源码原因解决参考现象A服务通过post请求访问B服务的时候,B服务返回了一个301,让A服务去访问C服务。在这期间method没有改变,只是修改了location。但是当A服务通过301访问到C服务的时候,method竟然由post变成了get请求。源码net/http/client.gofunc (c *Client) do(req *Req...转载 2020-03-11 12:36:37 · 2548 阅读 · 0 评论 -
golang http client跳过安全证书校验
// 跳过https证书校验 tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } //http cookie接口 cookieJar, _ := cookiejar.New(nil) client := &http.Client{ Time...原创 2020-03-11 11:46:26 · 3270 阅读 · 0 评论 -
golang使用ssh拉取gitlab代码库进行主机校验
目录设置config设置known_hosts设置git config --global设置config如果要忽略一切主机校验,在/root/.ssh目录下创建config文件const gitSshConfig = ` StrictHostKeyChecking no UserKnownHostsFile /dev/null`/**写这个的原因:git...原创 2019-12-26 11:07:07 · 2201 阅读 · 0 评论 -
curl发送post请求
curl要求的双引号要进行转义 curl -H "Content-Type:application/json" -X POST -d "{\"name\":\"katy\"}" http://xxx:8019/template/send原创 2019-11-28 15:06:31 · 330 阅读 · 0 评论 -
使用go拉取github代码
目录准备clonego-git clonegit clonepullgo-git pullgit pullfetchgo-git fetchgit fetchcheckoutgo-git checkoutgit fetch忽略host key检查准备代码获取方式有两种:1. 通过go-git api获取2. 通过git cl...原创 2019-11-21 15:24:43 · 7018 阅读 · 0 评论 -
go mod添加grpc依赖
在go.mod的require里面引入google.golang.org/grpc v1.18.0 // indirect我用的windowsgrpc编译需要protoc.exe和protoc-gen-go.exe可以直接把这两个放在C:\Users\用户\xxx\go\bin目录下就可以了。...原创 2019-10-29 16:54:43 · 2608 阅读 · 0 评论 -
go mod 私有项目版本号指定
公司以前的项目没有支持go mod,现在许哟啊支持go mod,就涉及到如何指定版本号的问题。找到项目最后一次提交的commit idk可以看到该项目的最后一次commit id为: 510aa62在go mod 的require里面引入项目的last commit id由于不知道哪个版本号,那么在require里面使用最近一次提交的commit id:510aa62...转载 2019-10-21 11:50:13 · 8054 阅读 · 0 评论 -
在dockerfile里面安装指定版本的golang作为基础镜像
go版本:1.12.10FROM ubuntu:16.04MAINTAINER katy.xie@163.comENV GOROOT /usr/local/goENV GOPATH /home/data/gopathRUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/...原创 2019-10-18 20:20:36 · 2898 阅读 · 2 评论 -
gorm
1.安装gormgo get -u github.com/jinzhu/gorm2. 连接数据库: 引入数据库驱动:import _ "github.com/jinzhu/gorm/dialects/mysql"// import _ "github.com/jinzhu/gorm/dialects/postgres"// import _ "github.com/jinzhu/gor原创 2018-01-17 19:25:09 · 2164 阅读 · 0 评论 -
go--gin
1.下载与安装:$ go get github.com/gin-gonic/gin2.导入: import "github.com/gin-gonic/gin"3. 请求方式:GET、POST、PUT、PATCH、DELETE、OPTIONS4.得到默认路由: router := gin.Default()5.路径上的参数:router.GET("/user/:name") fu原创 2018-01-17 19:25:34 · 705 阅读 · 0 评论 -
go 实现结构体的复制
go 将一个结构体里面的数据全部复制到另一个结构体import "reflect"func DeepFields(ifaceType reflect.Type) []reflect.StructField { var fields []reflect.StructField for i := 0; i < ifaceType.NumField(); i++ { v := ifa...转载 2018-02-23 15:12:48 · 12048 阅读 · 2 评论 -
golang tag 之 gomodifytags
链接:gomodifytags原文链接gomodifytags 是go工具,用来修改/更新struct字段的标签tag.使用gomodifytags可以很方便的update/add/delete struct的字段标签。你可以很方便的增加新的标签,更新已经存在的标签或者移除已经存在的标签。也允许你增加和移除标签选项。它的目的在于被编辑器使用,但是也有模式从终端运行它。默认按照下划线标识的tag.安...翻译 2018-05-04 16:15:46 · 2272 阅读 · 0 评论 -
gRPC proto3语法
公司项目使用了gRPC, 刚从java转go的我实在是搞不懂。百度了参考各种资料,在这里做个记录。参考:https://blog.csdn.net/carson_ho/article/details/70568606定义: 一种 结构化数据 的数据存储格式。(类似于xml, json)作用:通过将 结构化的数据 进行串行化(序列化),从而实现 数据存储/rpc数据交换 的功能序列化:将数据结...转载 2018-05-28 12:35:35 · 10818 阅读 · 0 评论 -
golang逃逸分析
逃逸分析是确定指针动态范围的方法,可以分析在程序的哪些地方可以访问指针。当一个变量(或对象)在子程序中被分配,一个指向变量的指针可能逃逸到其他执行线程中,或者去调用子程序。如果使用尾递归优化,对象也可能逃逸到被调用的子程序中。如果一个子程序分配一个对象并返回一个该对象的指针,该对象可能在程序中的任何一个地方被访问到,这样指针就成功“逃逸”了。如果指针存储在全局变量或者其他数据结构中,也可能...转载 2018-07-24 16:26:40 · 1277 阅读 · 0 评论 -
运行golang报错
运行main出错。go install runtime/internal/sys: mkdir /usr/lib/go/pkg/linux_386: permission denied解决办法:ls $(go env GOROOT)/pkg && sudo chown -R $USER $(go env GOROOT)/pkg ...原创 2018-08-04 17:00:31 · 1349 阅读 · 0 评论 -
golang垃圾回收gc
垃圾回收概念对不再使用的内存资源进行自动回收的行为。出现的原因内存管理是程序员开发应用的难题,传统的编程语言(c/c++),程序员须小心进行管理操作,控制内存的申请及释放。稍有不慎会造成内存泄漏。以往常用办法1.内存泄漏检测工具。原理是静态代码扫描,通过扫描程序检测可能出现内存泄漏的代码段,然而检测工具难免有疏漏和不足,只能嗯起到辅助作用。2.职能指针。c++中引入的自动内...转载 2018-08-09 17:49:27 · 420 阅读 · 0 评论 -
golang 的runtime机制
runtime负责管理任务调度,垃圾收集与运行环境。同时go提供了一些高级的功能,人哦goroutine,channel以及gc,这些高级功能需要runtime的支持。runtime和用户编译后的代码被linker静态链接起来,形成可执行文件。这个文件从操作系统角度来说是可执行文件。从运行角度说,这个文件由用户代码和runtime组成。runtime通过接口函数调用来管理goroutine,c...转载 2018-08-10 12:42:52 · 5125 阅读 · 0 评论 -
golang项目部署到服务器如何运行
参考:https://blog.csdn.net/qq_33230584/article/details/81536572如果想让项目在后台执行:执行 nohup ./main & ,这样就可以程序在后台运行了如果是windows开发环境,在windows开发完以后,使用cmd窗口进入需要编译的项目的目录,执行set GOOS=linux然后编译,ru得到结果:...转载 2018-09-12 12:58:08 · 13852 阅读 · 0 评论 -
gin解决跨域问题
背景前端框架:vue.js,是网上别人已经封装好的模板后台web框架:gin后台限制请求方式只能是post,所有接口已经测试通过。前端调试始终提示404.日志打印前端的请求方式是options,而不是post。此时将后台的请求方式由post修改为options,返回成功。说明问题点就在请求method这里。但是前端明显有设置method为post,到了发送请求的时候自动变成了o...原创 2018-09-13 13:02:44 · 21598 阅读 · 0 评论 -
ubuntu安装golang
如果之前有安装过go的,需要提前卸载。apt-get purge golang-go参考大佬的文章就好:https://www.cnblogs.com/tinywan/p/6928300.html谢大的:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.1.md...转载 2018-09-15 13:00:56 · 286 阅读 · 0 评论 -
gin解析json格式的数据出错
好多天没有更博了。因为前几天家里出了点急事,回家了几天。奔丧去了。回到公司一堆bug亟待解决。写的接口给测试测试,现在还没有页面,直接测试接口。使用c.BindJSON(&req)总是报错,大致错误信息如下:err="invalid character '-' in numeric literal"这是由于我的接口要求将参数按照json格式传递到后台,结果测试同...原创 2018-09-27 14:14:58 · 8148 阅读 · 0 评论 -
编译go代码:go build
前几天遇到个问题:代码在服务器编译以后想要kill的时候查找很麻烦。把本地代码部署到服务器(没有使用容器), 我是这样做的:把代码放到服务器后编译每个项目的main.go,执行如下命令:go build main.go以上命令运行以后会生成一个main.exe的可执行文件。并以不挂断的方式在后台运行:nohup ./main &由于有好几个项目都被我直接编...原创 2018-10-05 21:13:05 · 3144 阅读 · 0 评论 -
ubuntu安装protobuf
上家公司有使用grpc和protobuf,环境啥的都是别人搭好的,直接用就好。一直想要自己搞一套始终没时间,现在公司准备弄一个,但是时间太紧,一个人做整个后台,忙不过来。趁国庆时间多,摸索了一下,这里做个记录。protobuf是什么,就在这里不用多说了,如该你看到这里,那说明其实你已经知道protobuf是干啥用的,啥语法格式的你都已经清楚。环境:ubuntu参考链接:http...原创 2018-10-05 21:29:47 · 5311 阅读 · 0 评论 -
安装grpc出现很多pkg无法go get 到
请参考大佬的文章:https://www.jianshu.com/p/dba4c7a6d608go get google.golang.org/grpc这种官方安装是无法成功的。报错如下:package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get...原创 2018-10-15 13:50:21 · 1789 阅读 · 0 评论 -
goland打开终端报错:can't open local terminal
几分钟之前都好好的,后来突然就无法在goland里面打开终端了。无论使用alt+f12还是通过view-tool window-terminal都无法解决。当时开了好几个窗口,也有说关掉再开,结果还是不行。后来在一个技术群有大老提示:全部窗口关掉重启试试?好吧,重启之后就解决了,具体原因未知。 ...原创 2018-10-15 17:44:07 · 5673 阅读 · 0 评论 -
gin使用中间件出错后不能用return终止,而应该使用Abort实现
gin使用中间件一般是在引擎Engine初始化的时候就绑定,也就是说在需要使用中间件才能访问资源的接口之前干这些事情。也就是说,你现在有3个接口,比如一个用户登录(/api/v1/login), 一个管理员列表(/api/v1/list),一个添加管理员信息(/api/v1/add)。你现在的需求是查询管理员列表与添加管理员接口需要token鉴权才能访问,但是登录是不需要任何限制条件。那么...原创 2018-10-10 15:35:41 · 13675 阅读 · 6 评论 -
go 时间问题
最近遇到个golang的时间问题,还花了好些时间解决。我一般得到当前时间是time.Now()一般显示给前端都需要time.Now().Format("2006-01-02 15:04:05")当我使用time.Parse("2006-01-02 15:04:05", strDate)打算将parse以后的时间与time.Now()的时间作比较的时候,明明感觉是同...原创 2018-10-24 19:57:28 · 354 阅读 · 0 评论