一周系列:Golang专栏
文章平均质量分 79
通过一周的学习,彻底掌握go语言,搞懂go高级用法,上手商业项目。
Freedom3568
这个作者很懒,什么都没留下…
展开
-
Go:主流 web 框架中路由的实现原理
路由,就是 url 地址到业务处理代码的映射。当用户输入一个 url 地址时,服务器该知道该用户返回什么内容。比如,当用户点击登录时,服务器应该做登录相关的事情,并给用户返回登录成功或失败的页面。当用户点击退出时,服务器应该做和退出相关的事情(比如清理用户登录的数据),并返回给用户退出之后的页面。一个 url 到一个具体的处理函数之间的映射叫做一条路由。多条路由组成路由表。路由表主要用于路由查找,根据不同的路由表的组织形式,可以有不同的查找方法。最简单的路由表就是使用 map。原创 2023-01-03 11:49:44 · 443 阅读 · 0 评论 -
Go:You-Get 简介
now and.原创 2023-01-03 11:13:54 · 133 阅读 · 0 评论 -
Go:go简介及国内镜像源配置
Go 是一门编译型和静态的编程语言。因为 Go 语言是 2009 年诞生的,比目前市面上主流的编程语言,如 C、C++、Python、Java 都要新,所以它能够基于多种语言,取其精华,去其糟粕。内置并发编程支持:协程(goroutine)和通道(channel)内置映射(map)和切片(slice)类型支持多态使用接口来实现装箱(value boxing)和反射(reflection)支持指针、函数闭包、方法、延迟函数调用(defer)、类型内嵌和推断自动化的内存管理,即垃圾回收。原创 2023-01-03 10:56:07 · 10024 阅读 · 0 评论 -
Go:使用 go-micro 构建微服务(二)
它是一个可插入的RPC框架,用于在Go中编写微服务。服务发现: 应用程序自动注册到服务发现系统负载平衡: 客户端负载平衡,用于平衡服务实例之间的请求同步通信: 提供请求 / 响应传输层。异步通信: 内置发布 / 订阅功能。消息编码: 基于消息的内容类型头的编码 / 解码。RPC 客户机/服务器包: 利用上述功能并公开接口来构建微服务。原创 2022-12-21 17:25:52 · 560 阅读 · 0 评论 -
Go:使用 go-micro 构建微服务(一)
Java 社区中有着非常著名的框架用于构建微服务系统。Spring: Spring Boot 是用于编写微服务的流行 Java 框架。Spring Cloud:基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。Dropwizard:一个开源的 RESTful 快速开发框架,对微服务的开发也极其友好,而且性能很强。原创 2022-12-21 17:05:37 · 2222 阅读 · 1 评论 -
Go:微服务框架介绍
golang 常见微服务框架有 按starts数排列。原创 2022-12-21 16:47:08 · 3184 阅读 · 0 评论 -
Go:十大主流微服务框架
目标是简化分布式系统开发。项目简介:阿里,由Apache 软件基金会官方发布Go 语言加入 Dubbo 生态,架构是基于dubbo的extension模块和分层的代码设计,主要解决 Go 项目与 Java & Dubbo 项目的互通问题,同时也为 Go 项目提供了一种 RPC 与微服务。官方文档地址:https://dubbogo.github.io/dubbo-go-website/zh-cn/项目简介:斗鱼开源的一套微服务治理框架,提供丰富的后台功能,管理应用的资源、配置,应用的性能、配置等可视化。原创 2022-12-21 15:38:26 · 5527 阅读 · 0 评论 -
Go:关于goroutine及ants的思考
即便每个goroutine只分配2KB的内存,但如果是恐怖如斯的数量,聚少成多,内存暴涨,就会对GC造成极大的负担,写过java的同学应该知道jvm GC那万恶的STW(Stop The World)机制,也就是GC的时候会挂起用户程序直到垃圾回收完,虽然Go1.8之后的GC已经去掉了STW以及优化成了并行GC,性能上有了不小的提升,但是,如果太过于频繁地进行GC,依然会有性能瓶颈;(这里只是举个极端的例子,实际编程起这么大规模的goroutine的例子极少)这里就会出问题,什么问题呢?原创 2022-11-23 16:30:26 · 293 阅读 · 0 评论 -
Go:goroutine线程池 ants 简介与实践
github地址: https://github.com/panjf2000/antsants是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine复用,允许使用者在开发并发程序的时候限制goroutine数量,复用资源,达到更高效执行任务的效果。自动调度海量的 goroutines,复用 goroutines定期清理过期的 goroutines,进一步节省资源。原创 2022-11-23 16:18:41 · 1142 阅读 · 0 评论 -
Go:web框架 Gin 简介与实践
gin是用go语言开发的一个web框架,简单易用,是一个轻量级框架。Gin是Golang的一个web框架,封装优雅API友好,源码注释比较明确。借助Gin框架开发web服务,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。原创 2022-11-23 15:04:57 · 2265 阅读 · 0 评论 -
Go:基于BDD的测试框架 Ginkgo 简介及实践
在如何有效地测试Go代码一文中,我们谈论了单元测试,针对它的两大难点:解耦、依赖,提出了面向接口、mock 依赖的解决方案。同时,该文还讨论了一些 Go 领域内的实用测试工具,欢迎读者阅读。单元测试关注点是代码逻辑单元,一般是一个对象或者一个具体函数。我们可以编写足够的单元测试来确保代码的质量,当功能修改或代码重构时,充分的单元测试案例能够给予我们足够的信心。单元测试之上是开发规范。原创 2022-11-23 11:33:57 · 2283 阅读 · 0 评论 -
Go:微服务架构下的单元测试(基于 Ginkgo、gomock 、Gomega)
本文主要使用 Ginkgo[2] 、gomock[3] 、Gomega[4] 工具来实现单元测试,之前不了解的同学,可以先熟悉一下相关文档。第一条命令是获取 ginkgo 并且安装 ginkgo 可执行文件到 $GOPATH/bin–- 你需要在你电脑中把 $GOPATH 配置上,并配置上它。第二条命令安装了全部 gomega 库。Ginkgo 与 Go 现有的测试基础设施挂钩,可以使用 go test 运行 Ginkgo 套件。原创 2022-11-23 11:14:57 · 1098 阅读 · 1 评论 -
Go:测试库(GoConvey,testify,GoStub,GoMonkey)对比及简介
我们知道,对函数变量mock本质上是因为函数在编译前是不会有地址的,所以要用函数变量的地址作为函数的地址。并且这样的测试也是不安全的,因为Num可能为0,也可能已经被别的函数修改为100以上了,这个测试是有可能通过的,但是JudgeNum的桩并没有打到,我们称这种测试通过是假的通过。我们可以看到,Convey的第一个参数指的是该测试的名字,第二个参数是testing.T的指针,第三个参数是一个闭包,用于测试,其中So是断言函数,ShouldBeTrue代表着只有true的情况下这个测试用例才能通过。原创 2022-11-23 10:42:18 · 1344 阅读 · 0 评论 -
Go:测试库testify简介
testify可以说是最流行的(从 GitHub star 数来看)Go 语言测试库了。testify提供了很多方便的函数帮助我们做assert和错误信息输出。使用标准库testing,我们需要自己编写各种条件判断,根据判断结果决定输出对应的信息。assert:断言;mock:测试替身;suite:测试套件。原创 2022-11-23 09:56:43 · 835 阅读 · 0 评论 -
Go:日志滚动(rolling)记录器 lumberjack 简介
lumberjack是一个日志滚动记录器。写入lumberjack的日志达到一定的条件后会进行存档(普通文件的形式,或压缩文件的形式),然后新建另一个同名文件(原文件存档时会重命名)继续记录。但是lumberjack本身并不包含日志的基础功能,例如日志等级、日志格式化等。理论上可以向lumberjack写入任意文本,并实现滚动记录。一般情况下,lumberjack配合其他日志库,实现日志的滚动(rolling)记录。原创 2022-11-23 00:01:07 · 1982 阅读 · 0 评论 -
Go:数据压缩技术选型及 snapy 简介
当数据量过大的时候,压缩成了一种解决问题的很好方式。在实际项目中,压缩需要考虑,压缩的速度,压缩的比率,资源的消息程度等等。综合考虑上述几个点,选出了gzip和snapy两种压缩算法,进行实际的测试。google 自家的snappy 压缩优点是非常高的速度和合理的压缩率。压缩率比gzip 小,cpu 占用小。压缩原理介绍参考:gzip压缩原理:https://www.jianshu.com/p/4033028e5570snapy压缩原理:https://zzjw.cc/post/snappy/原创 2022-11-22 23:46:07 · 1353 阅读 · 0 评论 -
Go:构建应用程序的10大框架
现在,很多开源库都支持构建应用程序。我应该向你推荐一些库,它们可以帮助启动具有简单设计、干净代码和良好性能的项目。Logrus 是 Go (golang)的结构化 Logger,完全兼容标准库 Log。项目地址:https://github.com/sirupsen/logrus。原创 2022-11-22 23:37:08 · 3367 阅读 · 0 评论 -
Go:进度条工具库 vbauerster/mpb 简介
mpb是一个在终端进行进度条渲染的工具库。原创 2022-11-22 18:53:56 · 330 阅读 · 0 评论 -
Go:配置文件解析库 spf13/viper简介(Go应用程序的完整配置解决方案)
在我们开发过程中,像数据库信息、邮件配置和其他的第三方服务密钥等这些固定的信息都会写在配置文件中,而配置文件又有多种表现形式和格式,有 JSON, TOML, YAML各种格式,而且测试环境,开发环境和生产环境用的配置文件也不是同一份。Viper是Go应用程序的完整配置解决方案,Viper可以被认为是您的所有应用程序配置需求的注册表。viper 支持Yaml、Json、 TOML、HCL 等格式,读取非常的方便。设置默认值。原创 2022-11-22 18:26:33 · 965 阅读 · 0 评论 -
Go:命令行参数解析工具plag简介
前面我们介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛。pflag 包的设计目的就是替代标准库中的 flag 包,因此它具有更强大的功能并且与标准的兼容性更好。本文将介绍 pflag 包与 flag 包相比的主要优势,如果你还不了解 flag 包的的用法,请参考前文 《flag 包简介》一文。原创 2022-11-22 18:05:36 · 262 阅读 · 0 评论 -
Go:命令行参数解析包 flag 简介
还有第三方提供的处理命令行参数的库,比如 Pflag 等。本文介绍了 Golang 标准库中 flag 包的基本用法,并进一步分析了其主要的代码逻辑。其实 flag 包还支持用户自定义类型的命令行参数,本文不再赘述,有兴趣的朋友请参考官方 demo。,可以通过 flag.Args() 和 flag.NArg() 函数获取未能解析的命令行参数。,如果通过 -xx 传入未定义的命令行参数,则会直接报错退出,并输出帮助信息。,此时输出的命令行参数都是定义的默认值。,传递的命令行参数会覆盖默认值。原创 2022-11-22 17:53:10 · 441 阅读 · 0 评论 -
GO:交互式命令行工具 survey
survey 可以让你方便的在终端上构建交互式和可访问提示的应用,支持ANSI。原创 2022-11-22 17:36:14 · 831 阅读 · 0 评论 -
Go:交互式提示工具go-prompt简介
受python提示工具包的启发,在Go中构建强大的交互式提示。原创 2022-11-22 17:23:51 · 1395 阅读 · 0 评论 -
Go : golang发布三方包流程简介
本文从创建仓库开始到发布第三方包后到使用第三方包,这样我们就可以跨项目使用啦。填写标签号(常规格式是 x.y.z)例如我的v0.0.1,填写发表的标题,一般是项目名,填写简介。点击 左下方的publish release,进行发布,发布完成后会自动跳转到如下图所示的发布栏。注意这里的函数名ReadNumber,首字母必须大写!1.输入仓库的名字,我这里输入simpleExample,用来做演示。注意:这里的一定是"github.com/组织名/项目名"这样的格式。例如,我在这里的使用的git命令如下。原创 2022-11-22 16:56:11 · 1496 阅读 · 0 评论 -
Go :标准库Sync简介与实践
Golang sync包提供了基础的异步操作方法,包括互斥锁Mutex,执行一次Once和并发等待组WaitGroup。Mutex: 互斥锁RWMutex:读写锁WaitGroup:并发等待组Once:执行一次Cond:信号量Pool:临时对象池Map:自带锁的map。原创 2022-11-18 16:38:27 · 116 阅读 · 0 评论 -
Go: 微服务框架 Fiber 简介与实践
Maintainable 可维修Testable 可测试的Loosely coupled 松散耦合的Independently deployable 可独立部署Owned by a small team 由一个小团队拥有微服务体系结构是一种应用程序架构,其中应用程序被开发为服务集合。它提供了独立开发,部署和维护微服务架构图和服务的框架。上图显示了微服务体系结构的样子。请注意,所有微服务都通过与客户端通信的 API 网关连接。原创 2022-11-18 16:09:38 · 3168 阅读 · 0 评论 -
Go: Struct 匿名字段简介与实践
这里我们有个问题,Person上有一个name属性,如果Student上也有一个name属性,那么我们怎么办呢?其实在go里面,最外层的属性具有有限的访问权限,当你通过Student.name访问的时候是访问Student上的属性。type关键字申明 person 为 struct类型,person包含name属性和age属性,对应的类型为string和int。从上面的例子可以看出来,struct 不仅可以将struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段,也可以进行相应的函数操作。原创 2022-11-18 15:59:22 · 845 阅读 · 0 评论 -
Go : 常用库MsgPack的简介与实践
官网: https://msgpack.org/MessagePack是一种有效的二进制序列化格式。它使您可以在JSON等多种语言中交换数据。但是它更快,更小。小整数被编码为单个字节,典型的短字符串除了本身之外,仅需要一个额外的字节。msgpack会将数据打包成二进制的数据,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加,所以在很大程度上减少来传输数据的大小。原创 2022-11-17 17:41:04 · 851 阅读 · 0 评论 -
go:goland使用常见问题
go:goland使用常见问题。原创 2022-11-17 17:09:04 · 1415 阅读 · 0 评论 -
Go: panic / recover 简介与实践
go语言追求简洁,所以go语言中没有try…catch语句。因为go语言的作者认为将异常和控制语句混在一起,很容易让这个程序变得混乱,异常也很容易被滥用。所以在go语言中,为了防止异常被滥用。我们常常使用函数的返回值来返回错误,而不是用异常来代替错误。如果在一些场景下确实需要处理异常,就可以使用panic和recover。panic用来抛出异常,recover用来恢复异常。panic是Go语言中,用于终止程序的一种函数,往往用在下面两种情况:1)程序出现了很大的故障,例如不能在提供服务了。原创 2022-11-17 17:00:47 · 1560 阅读 · 0 评论 -
Go :WaitGroup简介与实践
在Go语言中,sync.WaitGroup结构体对象用于等待一组线程的结束;WaitGroup是go并发中最常用的工具,我们可以通过WaitGroup来表达这一组协程的任务是否完成,以决定是否继续往下走,或者取任务结果;在sync.WaitGroup结构体对象中有三个方法,Add()、Done()、Wait()Add()方法主要为WaitGroup的等待数+1或者+n;Add()方法内部计数器加上delta,delta可以是负数;原创 2022-11-17 16:09:55 · 3089 阅读 · 0 评论 -
Go:Signal信号量的简介与实践(优雅的退出)
go中的信号量有些信号名对应着3个信号值,这是因为这些信号值与平台相关,SIGKILL和SIGSTOP这两个信号既不能被应用程序捕获,也不能被操作系统阻塞或忽略。原创 2022-11-17 15:41:22 · 828 阅读 · 0 评论 -
Go: Interface接口简介与多态实践
如Go method中提及,Golang没有明确支持多态,但是通过其他手段可以实现类似C++中的多态特性,即本文中即将介绍的Go interface功能。interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现。请注意:此处限定是一组方法,既然是方法,就不能是变量;而且是一组,表明可以有多个方法。再多声明一点,interface本质上是一种类型,确切的说,是指针类型,此处暂且不多表,后文中自然能体会到。原创 2022-11-17 15:19:09 · 635 阅读 · 0 评论 -
Go :断言的简介与实践
go存在4种类型转换分别为:断言、强制、显式、隐式。通常说的类型转换是指断言,强制在日常不会使用到、显示是基本的类型转换、隐式使用到但是不会注意到。断言、强制、显式三类在go语法描述中均有说明,隐式是在日常使用过程中总结出来。断言通过判断变量是否可以转换成某一个类型,就是判断当前接口变量的动态类型是什么。//expression必须是接口类型,且自身类型与Type类型相符。原创 2022-11-17 15:00:59 · 1634 阅读 · 0 评论 -
Go : 类型转换的几种常见方法
Go 语言是静态语言,在编写代码时,就对类型有严格的要求,一旦类型不匹配,就有可能编译失败。因此在写代码时,就要经常用到类型的转换,这些知识点,对于一个新手来说,可以说是一个不小的门槛,经常要通常搜索引擎来寻找答案。今天我总结了四种日常开发中最经常遇到的类型转换方法,吃透后就可以自由的进行类型转换。原创 2022-11-17 14:30:29 · 1228 阅读 · 0 评论 -
Go : for 语句简单使用
可以看到比较大的一个不同在于 for 后面的条件表达式不需要用圆括号()括起来,Go语言还进一步考虑到无限循环的场景,让开发者不用写无聊的 for(;😉{}和do{} while(1);在结束每次循环前执行的语句,如果循环被 break、goto、return、panic 等语句强制退出,结束语句不会被执行。上述代码中,break 语句终止的是 JLoop 标签处的外层循环。原创 2022-11-17 14:05:54 · 226 阅读 · 0 评论 -
Go: 神奇的defer简介与实践
defer是go中一种延迟调用机制,defer后面的函数只有在当前函数执行完毕后才能执行,通常用于释放资源。defer遵循先进后出的原则,类似于栈的结构。go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return之后,比如b 的执行是发生在return 0之后,注意defer的语法,关键字defer之后是函数的调用。**为什么要把defer设计成这种机制?**因为后申请的资源和可能对前面申请的资源有依赖。如果先将前面申请的资源释放掉了。对于后面的资源可能会造成影响。原创 2022-11-17 11:36:04 · 288 阅读 · 0 评论 -
Go: LevelDb的简介与实践
LevelDB是一个由Google公司所研发的键-值存储嵌入式数据库管理系统编程库。leveldb是一个写性能十分优秀的存储引擎,是典型的LSM树(Log Structured-Merge Tree)实现。LSM树的核心思想就是放弃部分读的性能,换取最大的写入能力。比较使用读少写多的一种场景.以太坊、区块链。原创 2022-11-16 11:17:29 · 1286 阅读 · 0 评论 -
Go: 常用工具库cobra的简介与实践
来自jetbrains Go 语言现状调查报告 显示:在go开发者中使用go开发实用小程序的比例为31%仅次于web,go得益于跨平台、无依赖的特性,用来编写命令行或系统管理这类小程序非常不错。本文主要介绍Steve Francia(spf13)大神写的用于快速构建命令行程序的golang包cobra,基于cobra写命令行的著名项目一只手数不过来:Docker CLI、Helm、istio、etcd、Git、Github CLI。名称star仓库地址项目25.6kurfave/cli。原创 2022-11-16 11:10:03 · 2896 阅读 · 0 评论