Golang学习和进阶
文章平均质量分 81
记录C++转Golang的方方面面,记录如何从一个Go新手变成老油条的😊
Go和分布式IM
这个作者很懒,什么都没留下…
展开
-
RESTful API 设计指南——为什么要用(上)
还记得上文提到过的API命名问题吗?cmd = add把新增翻译为 save、append、new,或者干脆用拼音把参数放在 query 中,比如通过 cmd=add 来代表具体的操作。直接在 path 中拼接2个单词除了上述问题之外,这个新增员工接口是发 POST 还是 GET 请求?是通过 HTTP 状态码代表操作结果,还是需要解析 json 来判断?如果是解析 json ,那个字段代表成功?等等这些问题,需要我们仔细的查阅它的 API 文档才能下定论。原创 2023-11-21 10:06:59 · 262 阅读 · 0 评论 -
RESTful API 设计指南——开篇词
本章我们向大家推荐了一本书籍,通过阅读 "第4章 面向资源的架构"我们可以补足 RESTful API 理论知识(我很少看到有人推荐这本书)。我们通过对比 REST、RESTful API 和 HTTP 的关系,以及给出了 REST 风格架构的出处(博士论文),让大家初步了解了 RESTful API 的前后今生。所有的接口都使用Post请求不管成功还是失败,HTTP状态码都返回200API命名千奇百怪这几个问题通常发生在不同的公司、不同的团队,如果你跳槽过几次,可能会遇到类似的问题。原创 2023-11-21 10:03:06 · 191 阅读 · 0 评论 -
Go-Benchmark入门-进阶篇(下)
打开 png,我们看到下面3个红框的位置,分辨有3个操作每个耗时10ms(mysql操作),他们是顺序执行,所以会占用30ms,总计40ms耗时左右,1秒钟也就执行25次,和压测结果接近,至此,我们结合pprof找到了函数耗时的点,可以做针对性的性能优化了,是不是很方便?原创 2023-05-16 13:29:15 · 1127 阅读 · 0 评论 -
Go-Benchmark入门-基础篇(上)
以斐波那契数 为例,我们实现了一种最简单的递归版本的解法,现在假设我们要编写 Benchmark 来测试这种解法的性能,让我们对算法的好坏有一个直观的了解原创 2023-05-16 13:18:30 · 1130 阅读 · 0 评论 -
go 图片上传:文件和Base64方式
网上找了好些教程,go客户端上传文件这一块,大部分的例子都是从文件读取然后上传的,但是项目中因为调用了第三方SDK,返回的是 base64 格式的图片,却没找到这方面的例子,特此分享一下解决方案。原创 2023-03-02 17:42:24 · 1454 阅读 · 0 评论 -
Kratos框架Http请求实现动态json解析
kratos框架可以支持grpc和http2种请求,当处理http post请求时,如果body 会根据type动态改变,那么kratos中的api proto应该怎么写呢?原创 2023-02-28 18:08:52 · 485 阅读 · 0 评论 -
Go最佳实践1——单元测试的另一种写法
本文介绍了3种单元测试类型:Test、Benchmark和Example原创 2022-12-16 12:00:54 · 404 阅读 · 0 评论 -
利用Kafka的Assign模式实现超大群组(10万+)消息推送
本文通过图文并茂的方式,介绍使用kafka 手动消费分区的方式实现广播的效果,解决了百万级别长连接网关的消息路由问题,提升了整体系统性能和可用性原创 2022-09-23 09:50:27 · 2495 阅读 · 0 评论 -
go 中解析JSON的三种姿势
go中解析json的三种方式,你都掌握了吗?原创 2022-09-13 16:00:05 · 7795 阅读 · 1 评论 -
go kratos框架跨域中间件实现(v2)
go kratos框架跨域中间件实现,亲测通过,直接复制到项目中使用即可!原创 2022-08-31 10:48:07 · 1456 阅读 · 0 评论 -
【翻译】一步一步教你实现JWT安全认证(Go)
写给新手的jwt认证指南,教会你正确的使用jwt保证应用安全,涵盖accessToken和refreshToken的实现机制和原理。翻译 2022-08-24 11:54:16 · 1337 阅读 · 0 评论 -
Go死锁——当Channel遇上Mutex时
最近,我在测试 `ws长链接网关`时,平均一个星期会遇到一次服务假死问题,因为并不是所有routine被阻塞,故runtime的检查无法触发,http health check又是另开的一个端口,k8s检查不到异常,无法重启服务。到底是什么问题呢?...原创 2022-07-13 10:26:38 · 395 阅读 · 0 评论 -
使用JMeter测试Go WebSocket服务的并发
Performance Testing Web Sockets with JMeter原创 2022-06-23 18:51:00 · 4290 阅读 · 0 评论 -
go Cobra命令行工具入门
本文介绍一个go命令行工具库,我们可以基于cobra快速的开发我们自己的命令行程序,特别适合Admin CLI、写各种测试脚本(如果使用main入口,要建很多个package)等等场合。原创 2022-05-06 19:42:16 · 2361 阅读 · 0 评论 -
Go git commit 规范指南(Angular 规范)
文章目录Go git commit 规范指南(Angular 规范)前言Angular规范简介有什么好处?快速知道某次 commit 的目的方便过滤可以直接从commit生成Change log其他优点Angular规范规范构成HeadertypescopesubjectBodyFooter不兼容变动关闭 IssueRevert实用工具Commitizen安装validate-commit-msg生成 Change log参考Go git commit 规范指南(Angular 规范)根据原文:git转载 2022-03-09 11:29:19 · 1605 阅读 · 0 评论 -
ElasticSearch IK热词自动热更新原理与Golang实现
热更新概述ik分词器本身可以从配置文件加载扩张词库,也可以从远程HTTP服务器加载。从本地加载,则需要重启ES生效,影响比较大。所以,一般我们都会把词库放在远程服务器上。这里主要有2种方式:借助Nginx,在其某个目录结构下放一个dic.txt,我们只要更新这个文件,不需要重启ES也能达到热更新的目的。优点是简单,无需开发,缺点就是不够灵活。自己开发一个HTTP接口,返回词库。注意:一行代表一个词,http body中,自己追加\n换行。这里主要介绍第2种接口方式。热更新原理查看ik分词原创 2021-10-15 17:12:34 · 1262 阅读 · 0 评论 -
Go操作Elasticsearch总结
Go操作Elasticsearch总结安装参见:CentOS 7 RPM安装 Elasticsearch 7.14.1和常用插件官方入门例子《Elasticsearch:权威指南》“适应新环境” 通过一个例子,介绍了ES的核心概念。我们受雇于 Megacorp 公司,作为 HR 部门新的 “热爱无人机” (“We love our drones!”)激励项目的一部分,我们的任务是为此创建一个员工目录。该目录应当能培养员工认同感及支持实时、高效、动态协作,因此有一些业务需求:支持包含多值标签原创 2021-09-28 12:27:53 · 1621 阅读 · 0 评论 -
Go标准库日志打印,以及同时输出到控制台和文件
打印在使用go写一些小程序时,我们没必要引入额外的包,直接使用fmt标准包打印即可:import "fmt"func main() { fmt.Println("line1") fmt.Print("line2") fmt.Printf("line%d \n", 3) str1 := fmt.Sprintln("hello", 3) str2 := fmt.Sprint("hello ", 1, " 2") str3 := fmt.Sprintf("hello原创 2021-08-25 17:41:58 · 24100 阅读 · 4 评论 -
CGO入门和OCR文字识别(非第三方API,有源码,效果好)实战
文章目录CGO入门和OCR文字识别(非第三方API,有源码,效果好)实战CGO是什么极简入门CGO基础类型字符串、数组和函数调用CGO实战分离Go和C代码调用C静态库和动态库静态库动态库调用C++动态库CGO的缺陷CGO最佳使用场景总结CGO案例:在Go中调用动态库实现OCR文字识别chineseocr_lite介绍识别效果编译chineseocr_lite导出c函数环境变量设置运行参考CGO入门和OCR文字识别(非第三方API,有源码,效果好)实战CGO是什么简单点来讲,如果要调用C++,C写的库(原创 2021-08-20 16:55:52 · 1786 阅读 · 0 评论 -
发现一个Gophers头像的免费仓库
效果VectorSketches地址github: egonelbre/gophersstar: 2.4k原创 2021-08-12 10:05:32 · 961 阅读 · 0 评论 -
Golang中如何正确的使用sarama包操作Kafka?
背景在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源):用户A给B发送消息,msg_gateway收到消息后,投递消息到Kafka后就给A返回发送成功。这个时候,其实还没有持久化到mysql中,虽然最终会保持一致性。所以,试想如果Kafka丢消息了,是不是就出大问题了?A认为给B发送消息成功了,但是在服务器内部消息丢失了B并没有收到。所以,在使用Kafka的时候,有一些业务对消息丢失问题非常的关注。同样,常见的问题还有:重复消费的问题。乱序的问题。下面我们来一起看一下原创 2021-08-10 16:34:44 · 3444 阅读 · 1 评论 -
Go面试必问——GMP调度模型详解
来源:http://www.topgoer.com/并发编程/GMP原理与调度.html文章目录GMP 原理与调度Golang “调度器” 的由来?(1) 单进程时代不需要调度器(2) 多进程 / 线程时代有了调度器需求(3) 协程来提高 CPU 利用率N:1 关系1:1 关系M:N 关系(4) Go 语言的协程 goroutine(5) 被废弃的 goroutine 调度器 - GM模型Goroutine 调度器的 GMP 模型的设计思想(1) GMP 模型有关 P 和 M 的个数问题P 和 M 何时会转载 2021-08-05 10:20:48 · 5872 阅读 · 2 评论 -
Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门
莉莉丝游戏-Golang后端开发-中台部门开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。聊项目,介绍IM架构以及使用Go写的服务简介动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的?如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK发送失原创 2021-08-04 20:38:05 · 3172 阅读 · 5 评论 -
go rocketmq——ConsumeFromTimestamp的注意事项
go rocketmq——ConsumeFromTimestamp的注意事项消费者go中使用rocketmq为什么ConsumeFromTimestamp模式下,还能消费到之前生产的消息?调查ConsumeFromTimestamp解决办法总结消费者go中使用rocketmq初始化消费者的时候,官方例子是这样的:c, _ := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsRes原创 2020-07-01 14:08:11 · 3952 阅读 · 1 评论 -
goim编译——bilibili开源聊天室,支持百万用户在线
goim编译——bilibili开源聊天室,支持百万用户在线goim简介基础环境golang环境javakafkaredis编译编译goim编译Discovery安装部署运行测试goim简介官网:https://goim.io/goim是bilibili公司技术总监毛剑创作,使用go语言开发,用于B站生产线上的IM服务框架(聊天室),其框架原理图如下:部署成功后的websocket的demo如下:基础环境golang环境1.下载二进制包:go1.4.linux-amd64.tar.gzw原创 2020-06-04 17:25:31 · 12392 阅读 · 0 评论 -
Go-有些包拉不下来?试试配置goproxy.io代理
go mod从go1.11开始go mod功能,可以很方便的管理依赖了。不过有些包,如:google.golang.org/grpcgolang.org/x/sync因为网络被墙的原因总是拉不下来,我们可以通过设置 GOPROXY 环境变量来解决,具体如下:mac\centos7 设置如下:$ vim ~/.bash_profile# 加入一行export GOPROXY="https://goproxy.io"$ source ~/.bash_profile # 使生效$ go env原创 2020-06-02 15:09:41 · 4094 阅读 · 0 评论 -
golang-进程崩溃后如何输出错误日志?
近期程序线上运行出现了进程崩溃的问题,于是度娘加入了 defer 代码以便打印错误堆栈,运行半天后,发现进程不见了,但是log里面却没有任何错误。于是反复检测,终于找到问题所在。原创 2020-04-21 21:14:44 · 9817 阅读 · 4 评论 -
go不定义结构体解析json
go不定义结构体解析json背景simplejson库Interface{}怎么转换成string?背景系统自带的 Json.Marshal / Json.Unmarshal 需要定义一个结构体,json比较简单的时候就很好用,对于以下复杂的类型,就不太合适{ "userInfo":{ "userId":"100021", "deviceCode":"...原创 2020-04-17 14:02:33 · 3503 阅读 · 0 评论 -
IM开发利器 - 利用免费的对象存储服务实现图片上传和下载
文章目录楔子接下来正文开始创建存储空间表单上传获取upload_tokenGo代码生成(没成功)在线生成使用postman测试上传参考楔子在研究 Go中文网(https://studygolang.com) studygolang的源码时,从它的配置文件中发现了可以免费使用的对象存储服务,可以上传和下载图片,刚好给我自己的开源IM项目提供了补充,值得一用。; 图片存储在七牛云,如果没有可以通...原创 2020-03-30 12:01:03 · 596 阅读 · 0 评论 -
go实现Http Server文件服务器,提供上传、下载功能
server.gopackage mainimport ( "fmt" "github.com/prometheus/common/log" "io" "net/http" "os" "strings")func upload(w http.ResponseWriter, req *http.Request) { contentType := req.Header.Get...原创 2020-03-05 11:21:59 · 12437 阅读 · 5 评论 -
Golang使用pprof分析cpu占用过高问题
引言某日,需要给云主机添加端口映射时,发现一个核上的CPU使用率100%,后经过初步排除,确定是自己的IM开源项目(im_gate)进程引起,怪不得MAC上电脑很卡。通过度娘后,学习到go 自带pprof可以进行cpu和内存泄漏方面等的分析,经过一顿调查后成功找到了问题,总共耗费不到1个小时,为Golang的生态点赞????????????。我的开源项目在这里:github: https://github...原创 2020-01-11 19:58:14 · 7314 阅读 · 1 评论 -
史上最全面聊天机器人总结,图灵、思知、小爱、小微,作者已接入到自己的开源IM项目中使用
史上最全面聊天机器人总结,开源项目+开放平台+第三方公司,作者已接入到自己的开源IM项目中使用原创 2020-01-10 13:57:34 · 11272 阅读 · 4 评论 -
Linux-优雅退出在Golang中的用处和实现
优雅退出在Golang中的实现代码和陷阱以及最佳实践总结,直接可以在项目中使用。原创 2019-12-28 13:21:49 · 1481 阅读 · 3 评论 -
Golang学习记录-HTTP和TCP编程
Golang学习记录-HTTP和TCP编程前言Http-Server代码示例TCP代码示例ServerClient前言基于目前对于go语言的认识以及最近一段时间暂不找工作,决定使用go语言做一款im server。那么,先学一下怎么使用go进行http编程和tcp编程吧。参考资料:《Golang标准库文档》https://studygolang.com/pkgdocGO语言使用之网络编程...原创 2019-06-09 17:01:48 · 665 阅读 · 0 评论