![](https://img-blog.csdnimg.cn/0aa563f3024e44f8b52df4394e9b018d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
转投golang之旅
其他语言转golang的历程
SimonLiu_go
黑猫白猫,都是韭菜!
展开
-
转投go系列-前言及目录
今天有人问我从其他脚本语音转go怎么学,本人原来做过一段时间游戏,会一些脚本语言,像nodejs,c#,转go一段时间了,跟大家普及一下go应该怎么学。小白教程,高手请路过~下面是学习路径go语言基础go模块go与其他语言特别要注意的地方go框架go与数据库go与缓存go日志go与测试go实时通讯go与游戏go与任务go微服务go其他丰富模块...原创 2021-09-27 20:33:58 · 116 阅读 · 0 评论 -
转投go系列-谈谈profile工具
Golang自带profile作为性能监控和分析工具,可以进行cpu、内存、死锁分析。当看到下图说明开启分析工具成功,通过help命令可以查看具体操作方法。例如list xxx 方法,可以查看我们想看的可能有问题的方法。例如top方法,可以查看占用cpu的情况。原创 2022-09-16 17:53:30 · 1901 阅读 · 0 评论 -
转投go系列-atoi和itoa和iota的区别
Atoi和ItoA都是strconv标准库里面的方法:Atoi(ascii to integer)字符串转化为整数// Atoi is equivalent to ParseInt(s, 10, 0), converted to type int.func Atoi(s string) (int, error) {}ItoA (integer to ascii)整数转换成字符串// Itoa is equivalent to FormatInt(int64(i), 10).func It原创 2022-01-29 11:56:45 · 800 阅读 · 0 评论 -
转投go系列-指针操作与运算
静态语言与动态脚本语言有意思的是,可以直接操作指针,移动指针操作变量。我们都学过C++,当时也被指针操作所困扰。go确实不能直接操作指针,但是go提供了一个unsafe包可以这么样的操作。package unsafetype ArbitraryType inttype IntegerType inttype Pointer *ArbitraryTypefunc Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uin原创 2021-12-20 15:41:53 · 324 阅读 · 0 评论 -
转投go系列-go与缓存
BigCache :Go实现的大容量缓存,会通过Hash的方式进行分片。GCache:Cache library for golang. It supports expirable Cache, LFU, LRU and ARC.geocache:是一种适用于基于LBS的应用程序的内存缓存。它使用地理位置作为存储项目的键。go-proxy-cache :redis的反向代理onecache:支持多种存储的缓存代码库, 如InMemory,Filesystem,Memcached,Redis...原创 2021-12-07 10:26:33 · 881 阅读 · 0 评论 -
转投go系列-go的引用类型和值类型
值类型:int,float,bool,string,array和 struct,直接存储值,内存通常在栈中分配引用类型(指针类型): point,slice,map,chan,interface和func,存储的是地址,这个地址指向的空间里面存储值,内存通常在堆上分配,由GC回收//值类型i := 111 i -----> 111//引用类型ch:=make([]int32,0) ch ------> 内存地址0xaaaaaa -----> 值new和m..原创 2021-12-01 18:42:32 · 755 阅读 · 0 评论 -
转投go系列-go需要线程池吗?
GMP调度模型,不做过多赘述。那么Golang 已经实现了 M:N 的用户态携程Goroutine,还要必要在 Golang 里实现goroutine池吗?个人感觉还是必要的,因为在某些情况下还是要限制一下并发量的。同时就算goroutine的开销低,当对性能要求高,并且goroutine里面执行的操作时间极小时,频繁创建goroutine进行调用也是不可取的。接下来实现一个控制并发量的pool,但是不保存goroutine。比较适合小项目。...原创 2021-11-29 17:09:48 · 543 阅读 · 0 评论 -
转投go系列-go与测试
介绍一些测试库,满足你的小好奇心。GOC:拥有中文版的文档,专为 Go 语言打造的一个综合覆盖率收集系统,尤其适合复杂的测试场景,比如系统测试时的代码覆盖率收集以及精准测试。assert: 简单易用的断言库baloo:http端到端的方式,简单易用wstest :websocket的端到端测试biff:这个比较秀,兼容目前比较火的BDD测试covergates:简单易用的代码覆盖率dbcleaner :如果你对测试数据所困扰,提供了一个清库工具frisby :RESTful测试jsonas原创 2021-11-26 12:11:44 · 122 阅读 · 0 评论 -
转投go系列-for循环出错问题
for循环错误反例:func main() { in := []int{1, 2, 3, 4, 5} out := make([]*int, 0) for _, v := range in { //v := v 打开注释即正确 out = append(out, &v) } fmt.Println("res:", *out[0], *out[1], *out[2])}期望结果:1,2,3实际结果:5,5,5原因:range出来的v是同一个地址,最后都指向了5.原创 2021-11-16 20:09:43 · 502 阅读 · 0 评论 -
转投go系列-channel 堵塞问题
channel是Go语言中的一个核心类型,可以把它看成管道。编程难度肯定是有一些的,哈哈。“Go 强调不要通过共享内存来通讯,而是通过通讯来共享内存。”很多人都说上面的话,具体怎么理解呢?chan是一种引用类型,引用类型 channel可用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。举个例子:package mainimport "fmt"func main() { ch := make(chan int) go func() { for i原创 2021-11-16 17:54:21 · 817 阅读 · 0 评论 -
转投go系列-go语言需要注意的地方-结构体字段顺序对其
最近发现公司代码很多人定义结构体的时候不注意字段对其如下:type AuditTaskTemplateDetail struct { IsTemplate bool `json:"isTemplate"` //1 byte TemplateName string `json:"templateName"` //16 byte BatchCount int32 `json:"batchCount"` //4 byte}看起来上面好原创 2021-11-16 10:35:30 · 188 阅读 · 0 评论 -
转投go系列-go与数据库
下面给大家介绍几个数据库相关的库go-mysql : 处理 MySQL 协议的工具类库kingshard : 高性能的 MySQL 数据库中间件Orchestrator:MySQL高可用复制管理工具(可视化的!)dbq : 数据库sql库,支持MySQL和PostgreSQL。Dotsql : 不是ORM,不是sqlbuilder,是将 sql 文件保存在一个地方并且方便的取用的工具Squirrel : 一个sql buildersqrl:性能更好的 sql buildervitess:一原创 2021-11-03 22:59:27 · 112 阅读 · 0 评论 -
转投go系列-Gin框架-ShouldBind验证参数问题
今天发现前人(php转go的选手)的代码通过SholdBind方法不验证参数直接通过。严重怀疑代码使用方式不正确导致。原来前人的代码是这么使用的 c.SholdBind…func (con *Controller) Add(c *gin.Context) { var addReq *AddReq if err := c.ShouldBind(&addReq); err != nil { rsp.Errno = 0 rsp.Errmsg = err.Error() c.JSON(h原创 2021-10-22 16:23:50 · 1850 阅读 · 2 评论 -
转投go系列-go的垃圾回收和逃逸分析
go的垃圾回收和逃逸分析什么是GC?GC种类和Go用的哪个?根对象GC种类Go用的哪个?什么是GC?GC就是垃圾回收 “嘎壁纸” collectiongolang不需要对内存进行手动的申请和释放操作,GC会帮我们搞定,对比C/C++优势所在。GC 对我们几乎不可见,但是程序需要进行特殊优化时,可通过调用API解决。GC种类和Go用的哪个?根对象垃圾回收都是从根开始检查的,go里面都有哪些根呢?寄存器:可以理解为一个指针,指针可能指向某个分配好的堆内存区块执行栈:goroutine 包含自己的原创 2021-09-29 11:45:48 · 175 阅读 · 0 评论 -
转投go系列-go语言特别注意
这里面会介绍go与其他语言特别要注意的地方系列原创 2021-09-28 15:30:51 · 103 阅读 · 0 评论 -
转投go系列-goWeb框架
go完全可以代替php和nodejs等语言快速搭建web应用下面介绍一些框架:Beego 高性能web框架Gin 高性能web框架go-rest 高性能rest框架Fiber 类似于 nodejs里面的express框架Echo 非常简单的web框架Golf 功能强大且没有标准库以外的依赖vox 类似于nodejs里面的koa框架utron 一种MVC框架以上框架可以一键build出可执行文件,不需要任何宿主,瞬间感觉真香。如果想了解原理,可深入各框架的代码去了解。...原创 2021-09-28 14:59:02 · 92 阅读 · 0 评论 -
转投go系列-go模块
废话不多说,敲命令直接开启module模式。原创 2021-09-28 10:24:31 · 121 阅读 · 0 评论 -
转投go系列-go语言基础
本人学习go之路,这个是我看的第一本书,分享给大家!简介和安装:Introduction1 - Introduction and Installation2 - Hello World变量:Variables, Types and Constants3 - Variables4 - Types5 - Constants方法和包:Functions and Packages6 - Functions7 - Packages条件:Conditional Statements and Loo原创 2021-09-27 19:56:27 · 101 阅读 · 0 评论