Go 每日一库之 message-bus
简介在一个涉及多模块交互的系统中,如果模块的交互需要手动去调用对方的方法,那么代码的耦合度就太高了。所以产生了异步消息通信。实际上,各种各样的消息队列都是基于异步消息的。不过它们大部分都有着非常复杂的设计,很多被设计成一个独立的软件来使用。今天我们介绍一个非常小巧的异步消息通信库[message-b
Go 每日一库之 gojsonq
简介在日常工作中,每一名开发者,不管是前端还是后端,都经常使用JSON。JSON是一个很简单的数据交换格式。相比于XML,它灵活、轻巧、使用方便。JSON也是RESTfulAPI推荐的格式。有时,我们只想读取JSON中的某一些字段。如果自己手动解析、一层一层读取,这就变得异常繁琐了。特别是在嵌套层次
Go 每日一库之 dig
简介今天我们来介绍Go语言的一个依赖注入(DI)库——dig。dig是uber开源的库。Java依赖注入的库有很多,相信即使不是做Java开发的童鞋也听过大名鼎鼎的Spring。相比庞大的Spring,dig很小巧,实现和使用都比较简洁。快速使用第三方库需要先安装,由于我们的示例中使用了前面介绍的g
Go 每日一库之 email
简介程序中时常有发送邮件的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过邮件来推送。还有我们平时收到的垃圾邮件大都也是通过这种方式发送的😭。那么如何在Go语言发送邮件?本文我们介绍一下email库的使用。快速使用这个库的
Go 每日一库之 carbon
简介一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库time使用起来不太灵活,特别是日期时间的创建和运算。carbon库是一个时间扩展库,基于PHP的carbon库编写。提供易于使用的接口。本文就来介绍一下这个库。快速使用第三方库需要先安装:$gogetgithub.
Go 每日一库之 godotenv
简介twelve-factor应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。但是在实际开发中,如果同一台机器运行多个项目,设置环境变量容易冲突,不实用。godotenv库从.env文件中读取配置,然后存储到程序的环境变量中。在代码中可以使用读取
Go 每日一库之 logrus
简介前一篇文章介绍了Go标准库中的日志库log。最后我们也提到,log库只提供了三组接口,功能过于简单了。今天,我们来介绍一个日志库中的“明星库”——logrus。本文编写之时(2020.02.07),logrus在GitHub上star数已达到13.8k。logrus完全兼容标准的log库,还支持
Go 每日一库之 log
简介在日常开发中,日志是必不可少的功能。虽然有时可以用fmt库输出一些信息,但是灵活性不够。Go标准库提供了一个日志库log。本文介绍log库的使用。快速使用log是Go标准库提供的,不需要另外安装。可直接使用:packagemainimport("log")typeUserstruct{Names
Go 每日一库之 cast
简介今天我们再来介绍spf13大神的另一个库cast。cast是一个小巧、实用的类型转换库,用于将一个类型转为另一个类型。最初开发cast是用在hugo中的。快速使用先安装:$gogetgithub.com/spf13/cast后使用:packagemainimport("fmt""github.c
Go 每日一库之 fsnotify
简介上一篇文章Go每日一库之viper中,我们介绍了viper可以监听文件修改进而自动重新加载。其内部使用的就是fsnotify这个库,它是跨平台的。今天我们就来介绍一下它。快速使用先安装:$gogetgithub.com/fsnotify/fsnotify后使用:packagemainimport
Go 每日一库之 viper
简介上一篇文章介绍cobra的时候提到了viper,今天我们就来介绍一下这个库。viper是一个配置解决方案,拥有丰富的特性:支持JSON/TOML/YAML/HCL/envfile/Javaproperties等多种格式的配置文件;可以设置监听配置文件的修改,修改时自动加载新的配置;从环境变量、命
Go 每日一库之 cobra
简介cobra是一个命令行程序库,可以用来编写命令行程序。同时,它也提供了一个脚手架,用于生成基于cobra的应用程序框架。非常多知名的开源项目使用了cobra库构建命令行,如Kubernetes、Hugo、etcd等等等等。本文介绍cobra库的基本使用和一些有趣的特性。关于作者spf13,这里多
Go 每日一库之 go-ini
简介ini是Windows上常用的配置文件格式。MySQL的Windows版就是使用ini格式存储配置的。go-ini是Go语言中用于操作ini文件的第三方库。本文介绍go-ini库的使用。快速使用go-ini是第三方库,使用前需要安装:$gogetgopkg.in/ini.v1也可以使用GitHu
Go 每日一库之 go-homedir
简介今天我们来看一个很小,很实用的库go-homedir。顾名思义,go-homedir用来获取用户的主目录。实际上,使用标准库os/user我们也可以得到这个信息:packagemainimport("fmt""log""os/user")funcmain(){u,err:=user.Curren
Go 每日一库之 go-flags
简介在上一篇文章中,我们介绍了flag库。flag库是用于解析命令行选项的。但是flag有几个缺点:不显示支持短选项。当然上一篇文章中也提到过可以通过将两个选项共享同一个变量迂回实现,但写起来比较繁琐;选项变量的定义比较繁琐,每个选项都需要根据类型调用对应的Type或TypeVar函数;默认只支持有
Go Web 编程之 静态文件
概述在Web开发中,需要处理很多静态资源文件,如css/js和图片文件等。本文将介绍在Go语言中如何处理文件请求。接下来,我们将介绍两种处理文件请求的方式:原始方式和http.FileServer方法。原始方式原始方式比较简单粗暴,直接读取文件,然后返回给客户端。funcmain(){mux:=ht
Go Web 编程之 模板(二)
概述在上一篇文章中,我们介绍了Go模板库text/template。text/template库用于生成文本输出。在Web开发中,涉及到很多安全方面的问题。有些数据是用户输入的,不能直接替换到模板中,否则可能导致注入攻击。Go提供了html/template库处理这些问题。html/template
Go Web 编程之 模板(一)
概述模板引擎是Web编程中必不可少的一个组件。模板能分离逻辑和数据,使得逻辑简洁清晰,并且模板可复用。引用第二篇文章《程序结构》一文中的图示,我们可以看到模板引擎在Web程序结构中的位置:模板引擎按照功能可以划分为两种类型:无逻辑模板引擎:此类模板引擎只进行字符串的替换,无其它逻辑;嵌入逻辑模板引擎
Go Web 编程之 响应
概述上一篇文章中,我们介绍了请求的结构与处理。本文将详细介绍如何响应客户端的请求。其实在前面几篇文章中,我们已经使用过响应的功能——通过http.ResponseWriter发送字符串给客户端。但是这种方式仅限于发送字符串。本文我们将介绍如何定制响应的参数。ResponseWriter接口如果你看了
Go Web 编程之 请求
概述前面我们学习了处理器和处理器函数,如何编写和注册处理器。本文我们将学习如何从请求中获取信息。请求的结构通过前面的学习,我们知道处理器函数需要符合下面的签名:func(whttp.ResponseWriter,r*http.Request)其中,http.Request就是请求的类型。客户端传递的