AST 是什么
学习别人开源项目时无意中看到了一个 ast 包,遂好奇这是啥,发现是一个 语法树包
学习别人开源项目时无意中看到了一个 ast 包,遂好奇这是啥,发现是一个 语法树包
ACL 模型
RBAC 模型
在实践领域驱动设计(DDD)的过程中,设计好了领域对象之后,每次业务的操作只需针对这个领域对象进行更新。如下代码,每次更新都是 HumanAggregate 这个整体
go-delve/delve Golang 的断点调试
简单的打包 Golang 应用
规范路由
官方文档也有这些内容,这里只是把常用的操作记录下来,方便 Copy
注意,以下的热更新是使用 Linux 的信号量实现的,使用 Windows 这篇就跳过吧(没救了,等死吧)
Gin 框架是什么?
注册服务
GLFW 库是什么?
注意下载对应自己系统,以及架构的 SDK
因为学习 Java 时数据交流基本上是通过共享内存来实现多线程的通信的,阻塞队列使用较少,所以专门记录下 Go 中的 Channel 使用场景
三种状态和三种操作结果
管道 channel
这篇笔记主要是 GORM v2 的使用
new 是怎么工作的?
watcher 是一个用于监视文件或目录的更改(递归地或非递归地) ,而不使用文件系统事件,这使得它能够一致地跨平台工作。
数组(值传递)
map 类型
前言
注意:使用 ... 可以省略指定长度,Go 会根据元素个数来计算长度,但是这样创建的还是数组而不是切片
应用代理的原理
Survey 项目是一个终端的交互工具
GoYACC 是 Golang 版本的 YACC,本篇博文参考官网的 例子
使用的是 go-jwt 开源库
编写简单的测试代码
TLS 介绍
转载自 从Go的http.Client理解TLS过程 - 随便写点什么的文章 - 知乎
代理 HTTPS
Wire 是一个的 Go 依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入
embed 包是一个用来访问嵌入文件的包,先来说下为啥需要这个包
产生证书的代码脚本文件如下如下:
Unit Test
大部分内容转载自 数据库连接建立和增删改查基本实现
官方提供了 smtp 包用来发送邮件
转自 14.9 实现 Futures 模式
在一个无连接的协议(UDP)中,每个消息都包含了关于它的来源和目的地的信息。UDP 客户端和服务器使用的数据包,单独包含来源和目的地的信息。(它没有 Session)
Go 的网络包是由以下元素组成的
TCP 是一个面向连接的服务
net 包地址
Go 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。
有时我们需要一个通用的包装器用于统一的管理服务
如何实现一个简单的服务端客户端模式呢?
拿 Golang 刷题遇到的最大的麻烦就是它不像 Java 那样提供了必须的数据结构,很多时候都需要自己实现
零拷贝的使用场景
有时希望使用 GORM 时能并发执行 SQL,并能够回滚,这时直接使用 goroutine 开启协程有个很麻烦的问题就是如何收集到异常
为什么需要 Context ?
Docker 的工作模式
redigo 项目地址
这个 Swagger 是啥就不多说,Java 时写吐了都要,不过在 Golang 中看到这熟悉的面孔还是挺惊喜的。
Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
示例代码
编写一个惰性生成器
测试框架 goConvey 项目地址
Go 语言的特点
什么是基准测试?
defer 函数压栈
errors 包的 文档
执行命令并获得输出结果
切片遍历的优化
转载自 GoMock 快速上手教程 (部分过时的部分进行了修改)
学习项目源码时,看到了使用关于 http2 的包,使用的是 h2c,所以这里记录一下这个包的使用
无论是 Get 还是 Post,只要 resp 中的 body 内容非 nil,都需要手动关闭,否则会导致 goroutine 内存泄漏。
客户端可以直接通过 net/http.Get 使用默认的客户端 net/http.DefaultClient 发起 HTTP 请求
快速实现服务端
http 标准库
ioutil 库 就是一个工具包,里面主要是比较实用的函数,比如 ReadFile、WriteFile 等,唯一需要注意的是它们都是一次性读取和一次性写入,所以当读取的时候注意文件不能过大。
Go 的 IO 库整理
Go 标准库提供了一个 日志库 log
path 包的使用
这篇依旧转自 极客兔兔 pprof 性能分析
Request 结构体
ResponseWriter 接口
RPC 库
官方文档
select 是 Golang 在语言层面提供的多路 IO 复用的机制,其可以检测多个 channel 是否 ready(即是否可读或可写),使用起来非常方便。
什么是信号
map 的并发问题
TODO: ....
testing.M
uintptr 类型是什么
如果忘记哪个命令使用了可以使用 go help [command] 去看它的文档,这里就记录一些常用的命令
经常会有全局监听退出信号的需求,例如编写的 HTTP 服务或者 gRPC 服务需要监听退出信号时就可以使用这个方式
什么是内存对齐
Go 栈保存的是什么?
Golang 中似乎没有 StringBuffer 这种东西,今天刷题遇到需要操作字符串,如果直接使用 += 这种大力出奇迹肯定不行,所以看下别人是怎么用 Golang 进行字符添加的,发现用到了 rune 类型,遂好奇这是什么类型?
fs 包定义了文件系统的基本接口。
在某些情况下,输出(通常是数据输出)是通过选项卡文本完成的,例如使用这个 -func 命令时
glog 是一个 C++ 上的 glog 日志框架的 Golang 版本,基本实现了原生 glog 的日志格式。在 Kuberntes 中,glog 是默认日志库。
zap 是非常快的、结构化的,分日志级别的Go日志库。
time 包
管道流 io.Pipe()
bufio 库它主要是在io库上加了一层缓存的功能,
httptest 包
编写测试代码时,一个较好的办法是把测试的输入数据和期望的结果写在一起组成一个数据表(table-driven tests):表中的每条记录都是一个含有输入和期望值的完整测试用例,有时还可以结合像测试名字这样的额外信息来让测试输出更多的信息。
Golang 中的 AST
逃逸是怎么发生的?
log.go
写一个简单测试
使用方式:
反向代理是什么?
打印网络请求
在学习词法分析时,发现有一个 Seeker 接口
这个标题起得不是很好,Golang 不是就是函数式的吗?为啥还取这个名称,这里主要是用于类别 Java 那种函数式编程(传递回调函数),与正常的编程方式
Go 程序组成
struct 基本使用
Golang 的包管理
一般的编程语言都内置了反射工具,Go 虽然是面向过程的语言,但是也提供了这个工具包
转载自 极客兔兔-Go Reflect 提高反射性能
在 Java 这种面向对象的语言中,抽象类是我们经常会运用到的对抽象概念进行定义的机制。
Go 的异常处理
类型系统的概念
WaitGroup 等待一组协程
原子操作
安全的初始化 sync.Once
对象池 sync.Pool
Go 中的锁
创建 \ 退出 goroutine
Go 语言实现的三种常用并发模式;这些模式可以在实际生产应用中合理使用,免去了我们造轮子的过程。
垃圾回收算法
运行时(runtime)包
Golang 官方提供了 template 包用来方便用户动态模板文件
这里使用的客户端是 kafka-go
方案一:使用原生的命令
httptrace 包提供跟踪 HTTP 客户端请求中的事件的机制。
Context 的上下文问题
初始化环境
当文件过大,不适合一次性载入内存,且文件每行都包含特定信息时,我们就需要逐行读取文件来保证程序的性能;
先说场景,像 C#、TypeScript 这些语言都可以使用默认参数或者可选参数,如下:
cobra 项目地址
二进制序列化
这个 otto 包是一个第三方的 JS 解析器,看到了另一个解析器 goja 也很不错(作者说性能更好),但是因为最近用到了 otto,所以这里单独学习一下
Gin 框架不像 SpringBoot 那样打包好了一切工具,它的配置文件也需要自己去读取,所以这里使用第三方的配置项目 go-ini 它还附赠了 官网中文文档
作者spf13有两个明星项目—cobra & viper (眼睛蛇与蝮蛇)
标准项目结构
传统多线程实现并发的缺点
依旧是 protoreflect 包的使用
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
本篇笔记的代码基于上篇笔记的 代码 进行拓展
因为在 GLFW 那里就编写了基本的代码了,所以这里直接以这个 代码 为基础继续拓展
纹理的基本概念
理清楚这块的原理,理清思路
利用 go/ast 语法树做代码生成
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。证书签发涉及到了非对称加密方面的知识,这里介绍使用 golang中 的 x509 标准库进行证书自签发,还有证书签发后如何使用 golang 进行双向认证。
区块链常用哈希算法
无论解释器还是编译器前半部分的语言处理器都是一样的:
语法分析阶段