跳到主要内容

151 篇文档带有标签「Go」

查看所有标签

AST 是什么

学习别人开源项目时无意中看到了一个 ast 包,遂好奇这是啥,发现是一个 语法树包

DDD 持久化方案

在实践领域驱动设计(DDD)的过程中,设计好了领域对象之后,每次业务的操作只需针对这个领域对象进行更新。如下代码,每次更新都是 HumanAggregate 这个整体

Gin 实现热更新

注意,以下的热更新是使用 Linux 的信号量实现的,使用 Windows 这篇就跳过吧(没救了,等死吧)

Go Channel 使用场景记录

因为学习 Java 时数据交流基本上是通过共享内存来实现多线程的通信的,阻塞队列使用较少,所以专门记录下 Go 中的 Channel 使用场景

Go watcher 包-文件监听

watcher 是一个用于监视文件或目录的更改(递归地或非递归地) ,而不使用文件系统事件,这使得它能够一致地跨平台工作。

Go 中的 Slice

注意:使用 ... 可以省略指定长度,Go 会根据元素个数来计算长度,但是这样创建的还是数组而不是切片

Go 依赖注入工具 wire

Wire 是一个的 Go 依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入

Go 套接字 Socket 编程 - UDP 数据报

在一个无连接的协议(UDP)中,每个消息都包含了关于它的来源和目的地的信息。UDP 客户端和服务器使用的数据包,单独包含来源和目的地的信息。(它没有 Session)

Go 实现 Set

Go 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。

Go 实现队列

拿 Golang 刷题遇到的最大的麻烦就是它不像 Java 那样提供了必须的数据结构,很多时候都需要自己实现

Go 并发执行 SQL 小工具

有时希望使用 GORM 时能并发执行 SQL,并能够回滚,这时直接使用 goroutine 开启协程有个很麻烦的问题就是如何收集到异常

Go 整合 Swagger

这个 Swagger 是啥就不多说,Java 时写吐了都要,不过在 Golang 中看到这熟悉的面孔还是挺惊喜的。

Go 权限校验库 casbin

Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。

Go 的 HTTP 标准库-客户端

无论是 Get 还是 Post,只要 resp 中的 body 内容非 nil,都需要手动关闭,否则会导致 goroutine 内存泄漏。

Go 的 IO 工具包 ioutil

ioutil 库 就是一个工具包,里面主要是比较实用的函数,比如 ReadFile、WriteFile 等,唯一需要注意的是它们都是一次性读取和一次性写入,所以当读取的时候注意文件不能过大。

Go 的 select 使用与多路复用

select 是 Golang 在语言层面提供的多路 IO 复用的机制,其可以检测多个 channel 是否 ready(即是否可读或可写),使用起来非常方便。

Go 的 常用命令

如果忘记哪个命令使用了可以使用 go help [command] 去看它的文档,这里就记录一些常用的命令

Go 的全局退出监听

经常会有全局监听退出信号的需求,例如编写的 HTTP 服务或者 gRPC 服务需要监听退出信号时就可以使用这个方式

Go 的字符操作

Golang 中似乎没有 StringBuffer 这种东西,今天刷题遇到需要操作字符串,如果直接使用 += 这种大力出奇迹肯定不行,所以看下别人是怎么用 Golang 进行字符添加的,发现用到了 rune 类型,遂好奇这是什么类型?

Go 的日志包 glog

glog 是一个 C++ 上的 glog 日志框架的 Golang 版本,基本实现了原生 glog 的日志格式。在 Kuberntes 中,glog 是默认日志库。

Go 的表格驱动测试

编写测试代码时,一个较好的办法是把测试的输入数据和期望的结果写在一起组成一个数据表(table-driven tests):表中的每条记录都是一个含有输入和期望值的完整测试用例,有时还可以结合像测试名字这样的额外信息来让测试输出更多的信息。

Go 语言学习-“函数式编程”

这个标题起得不是很好,Golang 不是就是函数式的吗?为啥还取这个名称,这里主要是用于类别 Java 那种函数式编程(传递回调函数),与正常的编程方式

Go 语言学习-反射

一般的编程语言都内置了反射工具,Go 虽然是面向过程的语言,但是也提供了这个工具包

Go 逐行读取文件 Scanner

当文件过大,不适合一次性载入内存,且文件每行都包含特定信息时,我们就需要逐行读取文件来保证程序的性能;

Golang 的 JS 解释器之 otto 包

这个 otto 包是一个第三方的 JS 解析器,看到了另一个解析器 goja 也很不错(作者说性能更好),但是因为最近用到了 otto,所以这里单独学习一下

Golang 读取配置文件之 go-ini 包

Gin 框架不像 SpringBoot 那样打包好了一切工具,它的配置文件也需要自己去读取,所以这里使用第三方的配置项目 go-ini 它还附赠了 官网中文文档

使用 Go 自签发证书

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。证书签发涉及到了非对称加密方面的知识,这里介绍使用 golang中 的 x509 标准库进行证书自签发,还有证书签发后如何使用 golang 进行双向认证。