Go
qhh0205
专注于云计算、Dockers、Kubernetes、DevOps、持续集成/持续交付相关技术,企业级 DevOps 落地实践!
展开
-
GO 语言程序设计读书笔记-接口值
GO 语言程序设计读书笔记-接口值从概念上来讲,一个接口类型的值(简称接口值)其实有两个部分:一个具体类型和该类型的一个值。二者称为接口的动态类型和动态值。比如下面声明一个接口变量 w 并赋值,那么 w 接口值可以用如下图表示:接口的零值接口的零值就是把它的动态类型和动态值都设为 nil,如下图所示:var w io.Writer // 接口的零值在这种情况下就是一个 nil 接口值,可以用 w == nil 或者 w != nil 来检测一个接口值是否时 nil。调用一个 nil 接口的任何原创 2020-09-06 13:09:25 · 4091 阅读 · 0 评论 -
Golang 项目配置文件读取之 viper 实践
Golang 项目配置文件读取之 viper 实践在我们做一个工程化项目的时候,经常涉及到配置文件的读取,viper 包很好地满足这一需求,而且在 Golang 生态中是流行度最高的。导入方式:import "github.com/spf13/viper"这里分享下我对 viper 包的使用关键实践:首先,在代码工程中单独定义一个包(我一般起名为 config 或者 configloader),这个包专门用来读取加载配置文件,并做相关校验,包里面我定义 3 个函数和 1 个全局变量:var v原创 2020-07-11 20:26:06 · 1852 阅读 · 1 评论 -
Golang 项目中集成日志功能
Golang 项目中集成日志功能在一个 web 项目中,日志打印功能是必须的,有了详细的日志能为问题排查带来很大的便利。Golang 有很多开源的日志包可供使用,这里我还是使用非常流行的 logrus 包,结合 file-rotatelogs 包实现日志的自动切割轮转。集成方法:1.单独定义一个 package 名为 logger,里面只有一个 init.go 文件,初始化日志配置,这个配置是全局的:日志输出格式为 json;日志自动轮转,保留最近 7 天日志,一天产生一个日志文件,防止服务长原创 2020-07-06 09:37:21 · 1296 阅读 · 0 评论 -
Golang 从 Json 串中快速取出需要的字段
Golang 从 Json 串中快速取出需要的字段在 web 编程中很多情况下接口的数据是 json 格式,在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢?我们可以自定义一个结构体,然后通过 Golang 的标准库 json 解析到我们定义的结构体中。但是当 json 格式比较复杂,嵌套层级比较深的时候,还是用这种方法就比较麻烦了。在这里推荐一个包: gojsonq,可以很简便地从 json 串中提取出需要的字段,无需定义额外的结构体,然后解析,直接链式地从 json 串中提取需要的字原创 2020-07-05 21:58:02 · 9943 阅读 · 0 评论 -
Golang 多版本管理神器 gvm
缘起最近编译 kubernetes 遇到了点坑,编译各种报错,经搜索调研发现 k8s 的编译对 go 的版本有很严格的要求。比如我的 go1.13.4 就无法编译 kubernetes v1.16.3,必须得 go1.12.xx 版本才能编译。为了解决这种尴尬的场景只能再在主机安装个 go1.12.xx 版本,那么有没有什么优雅的方式来实现本机多版本 Golang 版本的管理呢,能很方便的进行不...原创 2020-03-01 11:46:44 · 3846 阅读 · 0 评论 -
Golang logrus 日志包及日志切割
Golang logrus 日志包及日志切割本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包 logrus 的基本使用,如何结合 file-rotatelogs 包实现日志文件的轮转切割两大话题。Golang 关于日志处理有很多包可以使用,标准库提供的 log 包功能比较少,不支持日志级别的精确控制,自定义添加日志字段等。在众多的日志包中,更推荐使用第三方的 logrus 包,完...原创 2020-01-28 23:52:35 · 13315 阅读 · 3 评论 -
Go 语言 exec 实时获取外部命令的执行输出
Go 语言 exec 实时获取外部命令的执行输出在 Go 语言中调用外部 Linux 命令可以通过标准的 os/exec 包实现,我们一般的使用方式如下:package mainimport ( "fmt" "os/exec")func main() { cmd := exec.Command("ls", "-al") output, _ := cmd.CombinedOut...原创 2019-07-20 18:19:59 · 13125 阅读 · 1 评论 -
使用 Go 开发命令行应用
使用 Go 开发命令行应用作为一个程序员,命令行工具是我们再熟悉不过的了,我们每天或多或少都会用到命令行工具。比如项目构建、打包、启动等等。那么如何用 Go 语言编写类似的工具呢?调研了下,大概有下面三种方法:os.Args 函数os.Args 功能类似于 Shell 脚本的 $@ 功能,获取到命令行输入,然后进行人工解析处理,这种方式对于编写简单的工具还行,对于复杂点的工具,光解析输入参...原创 2019-07-23 23:59:05 · 1754 阅读 · 1 评论 -
Golang 协程顺序打印
Golang 协程顺序打印A、B 两个协程分别打印 1、2、3、4 和 A,B,C,D实现:定义 A、B 两个 channal,开 A、B 两个协程,A 协程输出[1, 2, 3, 4]、B 协程输出[A, B, C, D],通过两个独立的 channal 控制顺序,交替输出。func main() { A := make(chan bool, 1) B := make(chan boo...原创 2019-07-23 16:41:04 · 5591 阅读 · 2 评论 -
Go 语言读写文件
Go 语言读写文件在这里演示下如何通过 Go 读写文件,Go 读写文件有很 IO 多函数可以使用,在这里使用 os 包的 OpenFile 和 Open 函数打开文件,然后用 bufio 包带缓冲的读写器读写文件。查看 OpenFile 源码,其实 Open 函数底层还是调用了 OpenFile。package mainimport ( "bufio" "fmt" "io" "os...原创 2019-07-15 21:52:09 · 1228 阅读 · 0 评论 -
Golang json 编解码
Json 编码Json 编码的过程即为将程序的数据结构转化为 json 串的过程,比如 Golang 里面的结构体、Python 中的字典,这些有结构的数据转化为 json 串。在 Golang 中编码 Json 使用 encoding/json 包的 Marshal() 函数,函数原型为:func Marshal(v interface{}) ([]byte, error)举例:将 Bo...原创 2019-07-09 19:29:43 · 437 阅读 · 0 评论 -
Go 语言入门
Go 语言入门Go 环境安装访问 Go 官网(https://golang.org),下载对应平台安装包,MacOs 下载 pkg 包一键安装,自动将 go 添加到了环境变量,直接可以使用 go 命令。第一支 Go 程序:hello, world!// helloworld.gopackage mainimport "fmt"func main() { fmt.Println(...原创 2019-01-01 23:19:52 · 293 阅读 · 0 评论