后台
文章平均质量分 81
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 · 1315 阅读 · 0 评论 -
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 · 2930 阅读 · 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 · 849 阅读 · 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 · 18068 阅读 · 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 · 2984 阅读 · 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 · 6179 阅读 · 1 评论 -
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 · 2393 阅读 · 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 · 3184 阅读 · 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 · 2156 阅读 · 0 评论 -
ubuntu 安装rabitMQ
RabitMQ需要erlang语言支持,在安装RabitMQ之前需要安装Erlang1. 安装erlangsudo apt-get install erlang-nox2. 安装rabitMQsudo apt-get updatesudo apt-get install rabbitmq-server3.启动RabitMQsudo rabbitmq-server start4. 查看RabitM...原创 2018-06-29 16:02:05 · 279 阅读 · 0 评论 -
RabitMQ---Work Queues
1. 消息确认RabitMQ是如何做到消息永远不会丢失?处理(从发送到接收)一个消息需要花费几秒。如果当消费者(consumers)开始了一个长时间的任务并且处理了一部分就死掉了会发生什么呢?如果没有消息确认机制,一旦RabitMQ传递了一个消息到消费者,jiuhuui立即标记为删除状态。在这种情况下,如果你kill掉一个consumer,该消息就会在处理过程中丢失。也会丢失所有派遣到该consu...翻译 2018-06-30 15:17:09 · 157 阅读 · 0 评论 -
RabitMQ---Publish/Subscribe
工作队列(work queue)是在如下假定的情况发生的:一个任务派遣给一个消费者在这里,我们将发送一个消息给多个consumers.-----即发布/订阅模式(publish/subscribe)exchange(交换机)RabitMQ中消息模型的核心思想是:生产者从来不直接发送消息到队列中。实际上,生产者甚至不知道消息会被发送到队列里。相反,生产者只能向交换机(exchange)发送消息。交换...翻译 2018-07-01 15:42:19 · 114 阅读 · 0 评论 -
RabitMQ---Routing
绑定(bindings)前面几个小节已经学会了如何实现exchange与queue的绑定。可以简单的理解为:queue对来自exchange的message感兴趣。binding需要一个额外的参数routing_key.为了避免与Channel.Publish里面的参数冲突,在这里称为binding key。如何创建一个routing_keyerr = ch.QueueBind( q.Name...翻译 2018-07-11 17:49:00 · 141 阅读 · 0 评论 -
RabitMQ---Topics
fanout exchange缺点:盲目广播,会忽略掉binding key的value。direct exchange: 不能基于多个标准进行路由。topic exchange:发送到topic exchange的message不能有任意的routing_key,必须是单词列表,有点号分隔。单词可以是任意的,但是通常他们都代表连接到message的一些特征。一些合法的routing key例子:...翻译 2018-07-13 13:12:00 · 96 阅读 · 0 评论 -
RabitMQ----RPC
在这小节,使用RabitMQ构建RPC:一个客户端和一个可扩展的RPC 服务器。回调队列(callback queue)通常情况下在RabitMQ上实现RPC是很容易的。客户端发送请求消息,服务器给出响应消息。为了接收响应,需要发送有回调队列地址的请求。以下demo使用的默认的队列:q, err := ch.QueueDeclare( "", // name false, // d...翻译 2018-07-14 11:00:50 · 256 阅读 · 0 评论 -
grpc
GRPC是什么?在GRPC中,如果是本地对象,一个客户端程序能直接调用在不同机器上的服务器端程序的方法,更方便的创建分布式应用程序和方法。在许多的grpc系统中, grpc基于定义服务的理念,指定可与他们的参数和返回类型的方法。在服务端,服务器实现此接口,并运行一个grpc服务器处理客户端调用。在客户端,客户端有一个存根(在某些语言中称为客户端),提供与服务器相同的方法。在各种环境下,GR...原创 2018-07-14 14:32:21 · 4966 阅读 · 0 评论 -
golang垃圾回收gc
垃圾回收概念对不再使用的内存资源进行自动回收的行为。出现的原因内存管理是程序员开发应用的难题,传统的编程语言(c/c++),程序员须小心进行管理操作,控制内存的申请及释放。稍有不慎会造成内存泄漏。以往常用办法1.内存泄漏检测工具。原理是静态代码扫描,通过扫描程序检测可能出现内存泄漏的代码段,然而检测工具难免有疏漏和不足,只能嗯起到辅助作用。2.职能指针。c++中引入的自动内...转载 2018-08-09 17:49:27 · 414 阅读 · 0 评论 -
golang 的runtime机制
runtime负责管理任务调度,垃圾收集与运行环境。同时go提供了一些高级的功能,人哦goroutine,channel以及gc,这些高级功能需要runtime的支持。runtime和用户编译后的代码被linker静态链接起来,形成可执行文件。这个文件从操作系统角度来说是可执行文件。从运行角度说,这个文件由用户代码和runtime组成。runtime通过接口函数调用来管理goroutine,c...转载 2018-08-10 12:42:52 · 5102 阅读 · 0 评论 -
tcp, udp的区别
1.tcp面向连接;udp无连接(发送数据之前不需要建立连接)2.tcp提供可靠服务。通过tcp连接传送的数据,无差错,不丢失,不重复,且按照顺序到达。udp尽最大努力交付,不保证可靠交付。3.tcp面向字节流,实际上是把tcp数据看成一连串无结构的字节流。udp是面向报文的,udp没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。4.每一条tcp连接只能是点到点的;udp支持...转载 2018-08-10 22:13:53 · 142 阅读 · 0 评论 -
微服务
目录核心模式(application architecture patterns)单体架构微服务架构如何将应用拆分为服务根据业务能力拆分根据领域的子域拆分微服务架构下如何维护数据唯一性事件驱动架构微服务如何实现数据查询每服务数据库模式背景问题需求解决办法API网关模式需求方案结果相关模式核心模式(application...原创 2018-08-02 18:22:10 · 197 阅读 · 0 评论 -
websocket协议
Socket socket又称为套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。实现应用程序间网络通信。socket可以使用TCP/IP协议或UDP协议。TCP/IP协议:是目前应用最广泛的协议,是构成Internet国际互联网协议的最为基础的协议,由TCP和IP协议组成。TCP协议:面向连接、可靠、基于字节流的传输层通信协议,负责数据的可靠传输。IP协议...转载 2018-08-12 11:19:14 · 228 阅读 · 0 评论 -
服务注册表
包含服务、服务的实例和其位置信息的数据库。各服务实例需要在启动时注册至该服务注册表,并在关闭时进行注销。该服务的客户端以及/或者路由器通过查询此服务注册表来找到可用的服务实例。经常作为服务注册表使用的技术:EurekaApache ZookeeperConsulEtcdk8s、Marathon以及AWS ELB等系统中存在隐式的服务注册表。结果优势服务的客户...原创 2018-08-03 13:26:17 · 1165 阅读 · 0 评论 -
服务端服务发现模式
微服务应用程序通常在虚拟化或者容器化环境中运行,服务实例的数量和位置是变化的。向某一服务发送请求时,客户端会通过已知位置运行的路由器(或者是负载均衡器)发送请求。路由器会查询服务注册表,并向可用的服务实例转发该请求。服务注册表也可内建于路由器之中。结果优势1.与客户端服务发现相比,客户端代码由于无需实现发现功能而更简单,客户端只需要向路由发送请求即可。2.部分云环境提供服务...原创 2018-08-03 13:26:33 · 750 阅读 · 0 评论 -
客户端服务发现
在向某一服务器发送请求时,客户端会通过查询service registery即:服务注册,来获取该服务实例的位置。该注册表包含全部服务的位置。结果优势:相对于服务器端服务发现而言,活动部件与网络中专数量更少。弊端:1.这一模式使客户端与服务注册表耦合2. 需要为应用程序中嗯使用的每种编程语言/框架建立客户端服务发现逻辑。...原创 2018-08-03 13:13:06 · 381 阅读 · 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 · 13828 阅读 · 0 评论 -
gin解决跨域问题
背景前端框架:vue.js,是网上别人已经封装好的模板后台web框架:gin后台限制请求方式只能是post,所有接口已经测试通过。前端调试始终提示404.日志打印前端的请求方式是options,而不是post。此时将后台的请求方式由post修改为options,返回成功。说明问题点就在请求method这里。但是前端明显有设置method为post,到了发送请求的时候自动变成了o...原创 2018-09-13 13:02:44 · 21488 阅读 · 0 评论 -
mysql 出现:Error 1205: Lock wait timeout exceeded; try restarting transaction
哈哈,没想到人生第一次遇到mysql的等待锁。幸会幸会前端页面还没做好,现在所有接口都是测试直接测。访问的是我的本机,没有放在服务器跑。测试同事以为我电脑运行的程序太多,导致测试的时候查询很慢,一直处于等待状态。后来查看日志发现,报错如下:Error 1205: Lock wait timeout exceeded; try restarting transaction为什么...原创 2018-09-13 17:07:38 · 735 阅读 · 0 评论 -
gorm踩坑:软删除与某个字段的唯一性
有一个user_infos表,用户名唯一。我在model定义user_name的时候已经使用gorm的tag标记为unique_index。类似如下:type UserInfo struct { Id uint `json:id` Created_at tine.Time `josn:"created_at"` Updated_at time.Time `json:"upd...原创 2018-09-15 11:15:00 · 13717 阅读 · 2 评论 -
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 · 282 阅读 · 0 评论 -
gin解析json格式的数据出错
好多天没有更博了。因为前几天家里出了点急事,回家了几天。奔丧去了。回到公司一堆bug亟待解决。写的接口给测试测试,现在还没有页面,直接测试接口。使用c.BindJSON(&req)总是报错,大致错误信息如下:err="invalid character '-' in numeric literal"这是由于我的接口要求将参数按照json格式传递到后台,结果测试同...原创 2018-09-27 14:14:58 · 8056 阅读 · 0 评论 -
编译go代码:go build
前几天遇到个问题:代码在服务器编译以后想要kill的时候查找很麻烦。把本地代码部署到服务器(没有使用容器), 我是这样做的:把代码放到服务器后编译每个项目的main.go,执行如下命令:go build main.go以上命令运行以后会生成一个main.exe的可执行文件。并以不挂断的方式在后台运行:nohup ./main &由于有好几个项目都被我直接编...原创 2018-10-05 21:13:05 · 3094 阅读 · 0 评论 -
ubuntu安装protobuf
上家公司有使用grpc和protobuf,环境啥的都是别人搭好的,直接用就好。一直想要自己搞一套始终没时间,现在公司准备弄一个,但是时间太紧,一个人做整个后台,忙不过来。趁国庆时间多,摸索了一下,这里做个记录。protobuf是什么,就在这里不用多说了,如该你看到这里,那说明其实你已经知道protobuf是干啥用的,啥语法格式的你都已经清楚。环境:ubuntu参考链接:http...原创 2018-10-05 21:29:47 · 5267 阅读 · 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 · 1767 阅读 · 0 评论 -
goland打开终端报错:can't open local terminal
几分钟之前都好好的,后来突然就无法在goland里面打开终端了。无论使用alt+f12还是通过view-tool window-terminal都无法解决。当时开了好几个窗口,也有说关掉再开,结果还是不行。后来在一个技术群有大老提示:全部窗口关掉重启试试?好吧,重启之后就解决了,具体原因未知。 ...原创 2018-10-15 17:44:07 · 5539 阅读 · 0 评论 -
gin使用中间件出错后不能用return终止,而应该使用Abort实现
gin使用中间件一般是在引擎Engine初始化的时候就绑定,也就是说在需要使用中间件才能访问资源的接口之前干这些事情。也就是说,你现在有3个接口,比如一个用户登录(/api/v1/login), 一个管理员列表(/api/v1/list),一个添加管理员信息(/api/v1/add)。你现在的需求是查询管理员列表与添加管理员接口需要token鉴权才能访问,但是登录是不需要任何限制条件。那么...原创 2018-10-10 15:35:41 · 13581 阅读 · 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 · 341 阅读 · 0 评论 -
gin文件上传到服务器报错:413
<html> <head> <title>413 Request Entity Too Large</title> </head> <body bgcolor="white"> <center> <h原创 2018-11-03 16:29:00 · 1490 阅读 · 0 评论 -
sql: Scan error on column index 6: converting driver.Value type []uint8 ("") to a uint: invalid synt
之前有个字段是string类型,执行db.AutoMigrate后,已经在db生成了该类型的字段,后来修改为了uint类型。但是忘了修改db里面的这个字段的类型。导致后来操作db 的时候报错。sql: Scan error on column index 6: converting driver.Value type []uint8 ("") to a uint: invalid synta...原创 2018-11-02 13:37:11 · 11906 阅读 · 0 评论 -
golang随机生成大写字母和数字的组合
// 随机生成指定位数的大写字母和数字的组合func GetRandomString(l int) string { str := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" bytes := []byte(str) result := []byte{} r := rand.New(rand.NewSource(time.Now().UnixNano...原创 2018-11-12 11:38:33 · 4647 阅读 · 1 评论 -
docker镜像build, tag, push
#!/bin/bashversion=$1docker build -f dockerfile -t 镜像名:${version} .docker tag 镜像名:${version} 镜像仓库/镜像名:${version} docker push 镜像仓库/镜像名:${version}if [ $? -eq 0 ]; then echo "push Success"else ...原创 2018-11-29 20:53:50 · 12331 阅读 · 0 评论