跳到主要内容

MIT 6.5840 Lab 2

Raft

Lab Blogs

Notes

1. 关于 Go 中的单元测试

Go 语言中形如 *_test.go 的文件会被认为是测试文件,使用 VSCode 调试测试文件(当然,并发情况下单步调试不再有效):

{
"debugAdapter": "dlv-dap",
"name": "raft2A",
"type": "go",
"request": "launch",
"mode": "test",
"cwd": "${workspaceFolder}/src/raft",
"program": "${workspaceFolder}/src/raft/test_test.go",
"buildFlags": "-race"
}

而在 Lab 2A,要求我们使用 go test -run 2A 以运行测试,仅有包含 2A 字符的测试会被运行。参考 go - How to run test cases in a specified file? - Stack Overflow ,其详细说明可以通过 go help testflag 查看。

2. sync.Once 的使用

Go sync.Once | Go 语言高性能编程 | 极客兔兔

make_config() 函数中出现,用于仅初始化随机种子一次。

3. Go 语法高亮问题

在 VSCode 中,默认的 Go 语法高亮不能很好地显示自定义类型,参考 [vscode-go] docs: mention advanced semantic token options 的提示修改配置文件。

因为我的实现是在阅读了开源库 hashicorp/raft 的部分源码后进行的