01 介绍 在之前的两篇文章中,我们已经介绍了使用 gRPC 创建 RPC 应用的前导知识。我们了解到 gRPC 支持多语言,本文我们介绍在 Golang 语言中怎么使用 gRPC。...02 准备工作 既然我们要介绍 gRPC 怎么在 Golang 语言中使用,那么我们必须搭建 Golang 开发环境。...word go run grpc_client/main.go frank 2021/09/11 23:03:31 Greeting: Hello frank 05 总结 本文我们介绍在 Golang 语言中怎么使用...推荐阅读: Golang 语言中的 defer 怎么使用? Golang 语言怎么使用 net/http 标准库开发 http 应用?...Golang 语言中怎么拦截系统信号和优雅退出 http server?
通过对称加密进行通信的实体必须共享该密钥,以便可以在解密过程中使用它。这种加密方法与非对称加密不同,非对称加密使用一对密钥(一个公钥和一个私钥)来加密和解密数据。...本文我们主要介绍 Golang 中怎么使用 AES 算法的对称密钥加密。...,更推荐大家使用 CBC,本文我们主要介绍使用最多的 CBC 分组模式。...04 总结 本文我们介绍了对称密钥加密的概念,并简单介绍了 AES 算法,最终我们还提供了 Golang 怎么使用 AES 算法的 CBC 分组模式实现对称密钥加密的示例代码,感兴趣的读者朋友,可以自行编写其它分组模式的代码...本文重点是介绍怎么使用 Go 语言实现对称密钥加密,代码占用篇幅比较多,关于 AES 算法的分组模式和填充模式的详细介绍,感兴趣的读者朋友们可以阅读参考资料给出的链接地址。
01 介绍 关于 Golang 语言接口的使用,在之前的一篇公众号文章中已经介绍过,未阅读的读者朋友,如果感兴趣,可以按需翻阅文末推荐阅读列表。...本文我们主要介绍在 Golang 语言中,如何使用接口编程?以及接口的使用技巧。...在 Golang 语言中,使用 Method 和使用 Func 的区别是,使用 Method 可以将类型和方法封装在一起,实现强耦合。...尽量不使用空接口类型作为函数参数 Golang 语言是强类型静态语言,Golang 编译器在编译期间会对变量做类型检查。...语言标准库中也有该使用方式,比如 fmt 包。
02 panic 触发方式和引发的后果 Golang 语言是静态强类型语言,在编译时,大多数问题就会被发现。但是一些会触发 panic 的问题只能在运行时才会被发现。...那么,我们应该怎么处理 panic 呢? 通常的做法是使用 defer 和 recover 捕获 panic,将 panic 错误写入日志文件,将程序恢复正常执行。...因为 panic 导致的后果非常严重,会导致程序崩溃,所以我们在处理一些不会影响程序正确运行的错误时,尽量使用 error 处理错误。 推荐阅读: Golang 语言怎么处理错误?...Go 语言学习之错误处理 Go语言学习之 panic 和 recover Golang 语言的值验证库 Validator 怎么使用?...Go team 开源项目 Go Cloud 使用的依赖注入工具 Wire 怎么使用? 参考资料: https://blog.golang.org/defer-panic-and-recover ?
01 介绍 在 Go 语言项目开发中,我们处理组件层级之间的依赖关系时,通常我们会先在依赖层级的代码中实例化被依赖层级,然后调用它的方法,即依赖方需要主动获取被依赖方。...本文我们介绍 Go 语言怎么使用依赖注入。 02 Go 语言使用依赖注入 在 Go 语言中,怎么使用依赖注入呢?我准备以 clean arch 架构的代码讲解。...推荐读者朋友们先阅读我之前写的一遍文章 「Go 语言整洁架构实践」。...大叔的一篇关于整洁架构的文章 The Clean Architecture,我们分 4 个层级: Models Repository Usecase Delivery 限于篇幅,本文主要介绍在 Go 语言中使用构造函数的方式实现依赖注入...所以,我们使用 Usecase 层的构造函数 NewTodoListUsecase 创建 Usecase 对象时,需要先使用 Repository 层的构造函数 NewMysqlTodoListRepository
欢迎大家点击上方蓝色文字「Golang 语言开发栈」关注公众号。 设为星标,第一时间接收推送文章。 文末扫码,一起学 Golang 语言。...01 介绍 在 Golang 语言中,我们可以在函数(自定义和部分内置)或方法中使用 defer 关键字注册延迟调用(一个或多个),多个延迟调用的执行顺序是先进后出(FILO)。...语言官方也在 golang 1.13 和 golang 1.14 中优化了 defer 的性能。...所以,我建议大家尽量使用 defer。 还有一点需要注意的是,我们不要使用 defer 调用有返回值的自定义函数或方法,返回值会丢失,可能会给应用程序带来意想不到的错误。...通常我们会在 Golang 语言开发中使用 defer 防止忘记释放资源(关闭文件或解锁)和捕获 panic(同一 goroutine 中) 防止应用程序崩溃退出。
01 介绍 我们在之前的文章中介绍过标准库 log 包的使用方式,它虽然使用方便,但是它支持的功能比较简单。...02 使用 Gin 构建一个 Web 应用 本文重点不是介绍 gin 框架的使用方式,所以我们仅使用 gin 框架构建一个简单的 Web 应用,代码如下: func main() { r := gin.Default...04 zap 日志库使用 lumberjack 库进行日志切割 Zap 日志库也不支持日志切割的功能,我们可以使用 lumberjack 日志切割库进行日志切割,关于 lumberjack 库的使用方式...推荐阅读: Go 1.18 新增三大功能之一“模糊测试”使用方式 Go 语言怎么解决编译器错误“err is shadowed during return”?...Golang 语言的标准库 log 包怎么使用? Golang 语言三方库 lumberjack 日志切割组件怎么使用?
01 介绍 Go 语言可以使用内置命令行工具 go build 编译生成可执行文件。...部署 Go 项目,只需运行可执行文件,一般有三种方式,分别是使用 nohup 命令、使用 supervisord 进程管理工具、使用 Docker。...本文我们介绍怎么使用 Docker 部署 Go 项目。阅读本文,需要读者朋友们了解 Docker 的基本操作。...我们主要介绍怎么将 docker compose 和 Dockerfile 配合使用,管理容器和镜像。...05 总结 本文我们介绍怎么使用 Docker 部署 Go 项目,并且介绍 Docker 容器管理工具 docker compose 的简单使用,关于 docker 和 docker compose
01 介绍 Go 语言中函数的最后一个参数可以是变长参数,细心的读者朋友们可能已经发现,在 Go 语言标准库 fmt包中就有使用变长参数函数,比如 Println 和 Printf。...我们在使用 Go 语言开发应用程序时,也可以在合适的场景使用变长参数函数,使我们的代码更优雅。 02 变长参数 顾名思义,变长参数是指参数的数量不固定,可以是 0 个,1 个或多个。...05 总结 本文我们主要介绍在 Go 语言中怎么使用变长参数函数,先是介绍变长参数和变长参数函数的相关知识,然后列举了一个简单示例,通过示例代码,加深读者朋友们的理解。...感兴趣的读者朋友们,不妨检查一下自己的项目中是否也有适合使用变长参数函数的场景,并尝试重构一下相关代码。 推荐阅读: Go 语言怎么使用对称加密?...Golang 语言的多种变量声明方式和使用场景 Golang 语言 vendor 在 GOPATH 和 Modules 中的区别 Golang 语言怎么使用 panic 函数?
为什么我们还需要使用 Nginx 部署 Go 语言开发的 Web 应用呢?...本文我们介绍怎么使用 Nginx 部署一个 Go 语言开发的 Web 应用。...04 总结 本文我们介绍怎么使用 Nginx 部署 Go 语言开发的 Web 应用,从而将 Nginx 的强大功能赋能给 Go 语言开发的 Web 应用。...推荐阅读: Go 1.18 新增三大功能之一“模糊测试”使用方式 Go 语言怎么解决编译器错误“err is shadowed during return”?...Go 语言学习之测试 Golang 语言怎么高效使用字符串? Golang 语言的标准库 log 包怎么使用?
Gomail 只能使用 SMTP 服务器发送电子邮件。但是该 API 灵活,可以轻松实现使用本地 Postfix,API 等发送电子邮件的其他方法。...它使用 gopkg.in 进行了版本控制,因此保证每个版本都不会存在向后不兼容的更改。它需要 Go 1.2 或更高版本。对于 Go 1.5,不使用外部依赖项。...02 gomail 包含的特性 附件 嵌入图片 HTML 和文本模板 特殊字符的自动编码 SSL 和 TLS 使用相同的 SMTP 连接发送多封电子邮件 03 gomail 安装 使用 go get...安装: go get gopkg.in/gomail.v2 04 gomail 使用 准备邮箱服务: 如果想要使用 gomail 开发发送邮件的功能,需要准备邮箱服务,除了自建SMTP 服务之外...06 总结 本文主要是给大家介绍了 Golang 语言中一个非常好用的发送邮件的三方库 gomail,不仅介绍了 gomail 的特性和安装使用方法,还列举了一个常见问题和解决方法。
01 介绍 Golang 语言中内置了两种字符类型,分别是 byte 的字节类类型,和 rune 的字符类类型。...本文主要讲解 bytes(byte slice)包的使用方法,并不会涉及比较 string 和 []byte 相关的内容,比如二者的底层实现、区别和相互转换等。...创建 Reader func NewReader(b []byte) *Reader 使用 NewReader 函数可以创建一个读取 b 的 Reader。...05 总结 本文介绍了 Golang 语言标准库的 bytes 包的函数和两个结构,Buffer 和 Reader,以及它们各自的方法。...通过阅读本文,读者可以了解 bytes 包的使用方法和部分底层实现。 bytes 包提供的函数不止文中介绍的这些,感兴趣的读者,建议阅读官方文档了解文中未被提及的函数。
01 介绍 Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger。...至此,我们发现 log 包的输出功能的函数,全部都是把信息输出到控制台,那么该怎么将信息输出到文件中呢?...除此之外,读者应该还发现了一个问题,输出信息都是以日期和时间开头,我们该怎么记录更加丰富的信息呢?比如源文件和行号。...interface{}) { l.definesLogger.Print(LevelError, fmt.Sprintf(format, v...)) } 04 总结 本文主要介绍 Golang 语言的标准库中的...log 包,包括 log 包的函数和自定义类型 logger 的使用方法和一些细节上的注意事项。
01 介绍 在 Golang 语言中,我们可以使用反单引号为 Struct 中的字段设置 Tag,通过 Tag 可以为 Struct 中的字段定义附加属性。...其中,每个 key 都是一个非空字符串,由除空格 (U+0020 ' ')、引号 (U+0022 '"') 和冒号 (U+003A ':') 以外的非控制字符组成;每个 value 都使用 U+0022...struct { Id uint64 `json:"id"` Name string `json:"name"` } 02 操作 Struct 字段中的 Tag 在 Golang 语言中...,可以使用标准库 reflect 包操作 Struct 中的 Tag。...在 reflect 包中,使用一个 StructField 表示 Struct 中的一个字段。
01 介绍 Validator 是基于 tag(标记)实现结构体和单个字段的值验证库,它包含以下功能: 使用验证 tag(标记)或自定义验证器进行跨字段和跨结构体验证。...提取自定义的字段名称,例如,可以指定在验证时提取 JSON 名称,并在生成的 FieldError 中使用该名称。 可自定义 i18n 错误消息。 Web 框架 gin 的默认验证器。...安装: 使用 go get: go get github.com/go-playground/validator/v10 然后将 Validator 包导入到代码中: import "github.com.../go-playground/validator/v10" 02 变量验证 Var 方法使用 tag(标记)验证方式验证单个变量。...最大值 min 最小值 oneof 其中一个 required 必需的 unique 唯一的 isDefault 默认值 len 长度 email 邮箱格式 05 总结 本文简单介绍了在 Go 语言中比较流行的值验证库
01 介绍 在 Golang 语言中,string 类型的值是只读的,不可以被修改。...本文我们介绍在 Golang 语言中怎么高效使用字符串。...04 字符串拼接 在 Golang 语言中,关于字符串拼接有多种方式,分别是: 使用操作符+/+= 使用 fmt.Sprintf 使用 bytes.Buffer 使用 strings.Join 使用 strings.Builder...06 总结 本文我们介绍了怎么高效使用 Golang 语言中的字符串,先是介绍了字符串在 runtime 中的数据结构,然后介绍了字符串拼接的几种方式,字符串与字节切片零拷贝互相转换,还通过示例代码证明了字符串在...Golang 语言中是只读的。
Viper 使用以下优先顺序。...03 怎么将配置项写入 Viper? 安装 go get github.com/spf13/viper 建立默认值 一个好的配置系统应该支持默认值。...如果您想要使用 - 或者其它符号在 Get() 调用中,但希望环境变量使用 _ 分隔符,这非常有用。使用它的示例可以在 viper_test.go 中找到。...signal to notify the system of the changes runtime_viper.Unmarshal(&runtime_conf) } }() 04 怎么在...在上面的所有示例中,他们都以单例模式风格演示了使用 Viper 的使用方法。 使用多个 Viper 实例 您还可以创建许多不同的 Viper 实例,供应用程序使用。每个都有其独特的配置和值集。
01 介绍 Go 语言是强类型编程语言,一些使用弱类型编程语言的读者朋友们在初学 Go 语言时,多多少少都会不太适应 Go 语言的类型。...本文我们介绍 Go 语言的类型转换和类型断言。 02 类型转换 我们在项目开发时,可能会遇到一些需要类型转换的场景,比如我们使用 Go 语言开发 Api 接口。...03 类型断言 我们在项目开发时,可能想要定义参数的类型为通用类型,比如我们使用 Go 语言开发 Api 接口。...我们想要尽量适配客户端(调用方)传参使用不同类型,比如调用方是使用弱类型编程语言的场景。...04 总结 本文我们介绍 Go 语言中让之前一直使用弱类型编程语言的读者朋友们迷惑的类型转换和类型断言。 读完本文,大家至少可以区分类型转换和类型断言的区别,和了解各自的使用场景。
还支持一些其它的数据源,这些就称为Grafana Plugins,grafana支持的插件非常多(grafana支持的插件传送门),只要做一些简单的插件安装配置,你就能获取丰富的数据源,后面的文章会讲解如何安装配置使用...一个row可以展示一种信息或者多种信息的组合,比如系统内存使用率,CPU五分钟及十分钟平均负载等。所以在一个DashBoard上可以集中展示很多内容。
BASIC认证概述 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证...BASIC认证的过程 1....服务器向客户端发送验证请求代码401,服务器返回的数据大抵如下: HTTP/1.0 401 Unauthorised Server: SokEvo/1.0 WWW-Authenticate: Basic...加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容: Get /index.html HTTP/1.0 Host:www.google.com Authorization: Basic...BASIC认证的缺点 HTTP基本认证的目标是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中,如大家所用路由器的配置页面的认证,几乎 都采取了这种方式。
领取专属 10元无门槛券
手把手带您无忧上云