Skip to content

Commit 19df309

Browse files
authored
Merge pull request #32 from shipengqi/docs/range
docs(go build): update usage of go:build tag
2 parents cacb852 + b89616d commit 19df309

File tree

5 files changed

+78
-116
lines changed

5 files changed

+78
-116
lines changed

SUMMARY.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- [Go 语言编程之旅](https://golang2.eddycjy.com/)
1313
- [Go 语言高级编程](https://chai2010.gitbooks.io/advanced-go-programming-book/content/)
1414
- [Go 夜读](https://github.com/developer-learning/reading-go) 11.6k
15+
- [Go Tutorial](https://github.com/jincheng9/go-tutorial)
1516

1617
## 高性能编程
1718

@@ -53,4 +54,5 @@
5354
## 其他资料
5455

5556
- [learning-golang-awesome](https://github.com/yangwenmai/learning-golang) 2.5k
56-
- Go 的学习资料
57+
- Go 的学习资料
58+
- [Go 学习面试指南](https://github.com/mao888/golang-guide) 1.5k

content/docs/practice/01_build.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ Go 支持两种条件编译方式:
1414

1515
### 编译标签
1616

17-
编译标签的规则:
17+
编译标签是以 `// +build` 开头的注释,编译标签的规则:
1818

19-
1. 空格表示:AND
20-
2. 逗号表示:OR`
19+
1. 空格表示:OR
20+
2. 逗号表示:AND
2121
3. `!` 表示:NOT
2222
4. 换行表示:AND
2323

@@ -26,14 +26,14 @@ Go 支持两种条件编译方式:
2626
- 操作系统,例如:`windows``linux` 等,对应 `runtime.GOOS` 的值。
2727
- 计算机架构,例如:`amd64``386`,对应 `runtime.GOARCH` 的值。
2828
- 编译器,例如:`gccgo``gc`,是否开启 CGO,cgo。
29-
- Go 版本,例如:`go1.19``go1.20`
29+
- Go 版本,例如:`go1.19` 表示从 从 Go 版本 1.19 起,`go1.20` 表示从 从 Go 版本 1.20 起
3030
- 自定义的标签,例如:编译时通过指定 `-tags` 传入的值。
31-
- `//go:build ignore`编译时自动忽略该文件
31+
- `// +build ignore`表示编译时自动忽略该文件
3232

33-
`go:build` 之后必须有空行,否则会被编译器当做普通注释。
33+
编译标签之后必须有空行,否则会被编译器当做普通注释。
3434

3535
```go
36-
//go:build linux,386 darwin,!cgo
36+
// +build linux,386 darwin,!cgo
3737

3838
package testpkg
3939
```
@@ -51,7 +51,7 @@ go build -tags mytag1 mytag2
5151
`-tags` 也有 `!` 规则,它表示的是没有这个标签。
5252

5353
```go
54-
//go:build !hello
54+
// +build !hello
5555
```
5656

5757
```bash
@@ -91,13 +91,17 @@ mypkg_windows_amd64.go // only builds on windows 64bit platforms
9191
- 需要排除某个平台或架构
9292
- 有一些自定义的编译条件
9393

94-
### +build
94+
### go:build
9595

96-
`// +build` 功能和 `//go:build` 一样。只不过 `//go:build` 是在 go 1.17 才引入的。目的是为了与其他现有的 Go 指令保持一致,例如 `//go:generate`
96+
`//go:build` 功能和 `// +build` 一样。只不过 `//go:build` 是在 go 1.17 才引入的。目的是为了与其他现有的 Go 指令保持一致,例如 `//go:generate`
97+
98+
规则: 由 `||``&&``!` 运算符(或、与、非)和括号组成的表达式,`//go:build ignore`,表示编译时自动忽略该文件。
99+
100+
例如 `//go:build (linux && 386) || (darwin && !cgo)`,表示目标系统是 386 的 linux 或者没有启用 cgo 的 darwin 时,当前文件会被编译进来。
97101

98102
## 交叉编译
99103

100-
Go 可以通过设置环境变量来实现交叉编译,用来在一个平台上生成另一个平台的可执行程序
104+
Go 可以通过设置环境变量来实现交叉编译,用来在一个平台上生成另一个平台的可执行程序:
101105

102106
```
103107
# linux amd64

content/docs/project/01_specs.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,8 @@ weight: 1
5151

5252
<!-- 如何提交代码 -->
5353

54-
## License
55-
56-
<!-- 开源许可证 -->
5754

58-
也可以使用 [readme.so](https://readme.so/),这是一个快速生成 README 文档的在线工具
55+
也可以使用快速生成 README 文档的在线工具 [readme.so](https://readme.so/)
5956

6057
### 项目文档
6158

@@ -67,6 +64,7 @@ weight: 1
6764
文档最好包含英文和中文 2 个版本。
6865

6966
文档目录结构示例:
67+
7068
```
7169
docs
7270
├── dev # 开发文档

content/docs/project/04_commitizen.md

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ weight: 4
55

66
# Commit 规范
77

8-
多人协作开发一个项目时,每个开发的 Commit Message 五花八门,时间久了,提交的历史变得很难看,而且有的 Commit Message 可能过于简单,可读性较差。
8+
多人协作开发一个项目时,如果 Commit Message 五花八门,时间久了,提交的历史变得很难看,而且过于简单的 Commit Message,可读性较差。
99

1010
一个好的 Commit 规范可以使 Commit Message 的可读性更好,并且可以实现自动化。
1111

@@ -121,50 +121,7 @@ Closes #123, #245, #992
121121
可以使用一些开源的工具,来自动生成规范化的 Commit Message:
122122

123123
- [commitizen](https://github.com/commitizen/cz-cli),Javascript 实现,需要安装 Node.js。
124-
- [commitizen-go](https://github.com/lintingzhen/commitizen-go),Go 版本的 commitizen,下载二进制文件就可以直接使用。
125-
126-
上面两个命令都可以进入交互模式,并根据提示生成 Commit Message,然后提交。
127-
128-
### commitizen
129-
130-
#### 安装
131-
132-
```
133-
$ npm install -g commitizen
134-
```
135-
136-
#### 使用
137-
138-
139-
初始化项目,使用 cz-conventional-changelog 适配器:
140-
141-
```
142-
# npm
143-
$ commitizen init cz-conventional-changelog --save-dev --save-exact
144-
145-
# yarn
146-
$ commitizen init cz-conventional-changelog --yarn --dev --exact
147-
148-
# pnpm
149-
$ commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact
150-
```
151-
152-
提交代码:
153-
154-
```
155-
$ git add .
156-
# 进入交互模式
157-
$ git cz
158-
```
159-
160-
![commitizen](https://raw.githubusercontent.com/shipengqi/illustrations/a6542076c06fd7a2d74ddfcb41ac8d9acf56e405/go/commitizen.gif)
161-
162-
> `git cz` 支持 `git commit` 的所有参数。
163-
164-
git log:
165-
166-
![git-commit-log](https://raw.githubusercontent.com/shipengqi/illustrations/643142bf64ec66adf5cd0bed1fbbe7f67bbcfb45/go/git-commit-log.png)
167-
124+
- Go 版本的 [commitizen](https://github.com/shipegnqi/commitizen),下载二进制文件就可以直接使用。
168125

169126
## 自动生成 CHANGELOG
170127

content/docs/project/06_api_doc.md

Lines changed: 56 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ weight: 6
99

1010
Swagger 是基于 OpenAPI 规范的 API 文档工具。
1111

12-
> OpenAPI 是一个 API 规范,它的前身就是 Swagger 规范,目前最新的 OpenAPI 规范是 [OpenAPI 3.0](https://swagger.io/docs/specification/about/)(也就是 Swagger 2.0 规范)。
12+
> OpenAPI 是一个 API 规范,它的前身就是 Swagger 规范,目前最新的 OpenAPI
13+
> 规范是 [OpenAPI 3.0](https://swagger.io/docs/specification/about/)(也就是 Swagger 2.0 规范)。
1314
1415
## Swagger 编辑器
1516

@@ -37,36 +38,36 @@ commit: ecf6f05b6ecc1b1725c8569534f133fa27e9de6b
3738

3839
`swagger` 提供的子命令:
3940

40-
| 子命令 | 描述 |
41-
| ---- | ---- |
42-
| diff | 对比两个 swagger 文档的差异 |
43-
| expand | 展开 swagger 定义文档中的 $ref |
44-
| flatten | 展平 swagger 文档 |
45-
| generate | 生成 swagger 文档,客户端,服务端代码 |
46-
| ini | 初始化一个 swagger 定义文档 |
47-
| mix | 合并 swagger 文档 |
48-
| serv | 启动 http 服务,用来查看 swagger 文档 |
49-
| validate | 验证 swagger 第一文件是否正确 |
41+
| 子命令 | 描述 |
42+
|----------|----------------------------|
43+
| diff | 对比两个 swagger 文档的差异 |
44+
| expand | 展开 swagger 定义文档中的 $ref |
45+
| flatten | 展平 swagger 文档 |
46+
| generate | 生成 swagger 文档,客户端,服务端代码 |
47+
| ini | 初始化一个 swagger 定义文档 |
48+
| mix | 合并 swagger 文档 |
49+
| serv | 启动 http 服务,用来查看 swagger 文档 |
50+
| validate | 验证 swagger 第一文件是否正确 |
5051

5152
### 使用
5253

5354
go-swagger 通过解析源码中的注释来生成 Swagger 文档。
5455

5556
注释语法:
5657

57-
| 注释语法 | 描述 |
58-
| ---- |----------|
59-
| swagger:meta | 定义全局基本信息 |
60-
| swagger:route | 定义路由信息 |
61-
| swagger:parameters | API 请求参数 |
62-
| swagger:response | API 响应参数 |
63-
| swagger:model | 可以复用的 Go 数据结构 |
64-
| swagger:allOf | 嵌入其他 Go 结构体 |
65-
| swagger:strfmt | 格式化的字符串 |
66-
| swagger:ignore | 需要忽略的结构体 |
58+
| 注释语法 | 描述 |
59+
|--------------------|---------------|
60+
| swagger:meta | 定义全局基本信息 |
61+
| swagger:route | 定义路由信息 |
62+
| swagger:parameters | API 请求参数 |
63+
| swagger:response | API 响应参数 |
64+
| swagger:model | 可以复用的 Go 数据结构 |
65+
| swagger:allOf | 嵌入其他 Go 结构体 |
66+
| swagger:strfmt | 格式化的字符串 |
67+
| swagger:ignore | 需要忽略的结构体 |
6768

68-
69-
`swagger generate` 命令会找到 `main` 函数,然后遍历所有源码文件,解析源码中与 Swagger 相关的注释,然后自动生成 `swagger.json/swagger.yaml` 文件。
69+
`swagger generate` 命令会找到 `main` 函数,然后遍历所有源码文件,解析源码中与 Swagger
70+
相关的注释,然后自动生成 `swagger.json/swagger.yaml` 文件。
7071

7172
```go
7273
package main
@@ -93,7 +94,7 @@ func main() {
9394
log.Fatal(r.Run(":8081"))
9495
}
9596

96-
// Create create a user.
97+
// Create a user.
9798
func Create(c *gin.Context) {
9899
var user api.User
99100
if err := c.ShouldBindJSON(&user); err != nil {
@@ -133,19 +134,19 @@ package api
133134

134135
// User represents body of User request and response.
135136
type User struct {
136-
// User's name.
137-
// Required: true
138-
Name string `json:"name"`
137+
// User's name.
138+
// Required: true
139+
Name string `json:"name"`
139140

140-
// User's nickname.
141-
// Required: true
142-
Nickname string `json:"nickname"`
141+
// User's nickname.
142+
// Required: true
143+
Nickname string `json:"nickname"`
143144

144-
// User's address.
145-
Address string `json:"address"`
145+
// User's address.
146+
Address string `json:"address"`
146147

147-
// User's email.
148-
Email string `json:"email"`
148+
// User's email.
149+
Email string `json:"email"`
149150
}
150151
```
151152

@@ -188,9 +189,8 @@ package docs
188189
package docs
189190

190191
import (
191-
v1 "github.com/shipengqi/idm/api/apiserver/v1"
192-
metav1 "github.com/shipengqi/idm/api/meta/v1"
193-
"github.com/shipengqi/idm/internal/apiserver/contorller/v1/user"
192+
v1 "github.com/shipengqi/idm/api/apiserver/v1"
193+
metav1 "github.com/shipengqi/idm/api/meta/v1"
194194
)
195195

196196
// swagger:route GET /users/{name} Users getUserRequest
@@ -216,57 +216,58 @@ import (
216216
// List users request.
217217
// swagger:parameters listUserRequest
218218
type listUserRequestParamsWrapper struct {
219-
// in:query
220-
metav1.ListOptions
219+
// in:query
220+
metav1.ListOptions
221221
}
222222

223223
// List users response.
224224
// swagger:response listUserResponse
225225
type listUserResponseWrapper struct {
226-
// in:body
227-
Body v1.UserList
226+
// in:body
227+
Body v1.UserList
228228
}
229229

230230
// User response.
231231
// swagger:response getUserResponse
232232
type getUserResponseWrapper struct {
233-
// in:body
234-
Body v1.User
233+
// in:body
234+
Body v1.User
235235
}
236236

237237
// swagger:parameters createUserRequest updateUserRequest
238238
type userRequestParamsWrapper struct {
239-
// User information.
240-
// in:body
241-
Body v1.User
239+
// User information.
240+
// in:body
241+
Body v1.User
242242
}
243243

244244
// swagger:parameters deleteUserRequest getUserRequest updateUserRequest
245245
type userNameParamsWrapper struct {
246-
// Username.
247-
// in:path
248-
Name string `json:"name"`
246+
// Username.
247+
// in:path
248+
Name string `json:"name"`
249249
}
250250

251251
// ErrResponse defines the return messages when an error occurred.
252252
// swagger:response errResponse
253253
type errResponseWrapper struct {
254-
// in:body
255-
Body response.Response
254+
// in:body
255+
Body response.Response
256256
}
257257

258258
// Return nil json object.
259259
// swagger:response okResponse
260260
type okResponseWrapper struct{}
261+
261262
```
262263

263-
- `swagger:route`:描述一个 API,格式为 `swagger:route [method] [url path pattern] [?tag1 tag2 tag3] [operation id]`,tag 可以是多个,相同 tag 的 API 在 Swagger 文档中会被分为一组。operation id 会和
264+
- `swagger:route`:描述一个 API,格式为 `swagger:route [method] [url path pattern] [?tag1 tag2 tag3] [operation id]`,tag 可以是多个,相同 tag 的 API 在 Swagger 文档中会被分为一组。operation id 会和
264265
`swagger:parameters` 的定义进行匹配,就是该 API 的请求参数。
265-
`swagger:route` 下面的一行是该 API 的描述,需要以 `.` 为结尾。`responses:` 定义了 API 的返回参数,例如当 HTTP 状态码是 200 时,返回 `createUserResponse``createUserResponse` 会和 `swagger:response`
266-
的定义进行匹配,匹配成功的 `swagger:response` 就是该 API 返回 200 状态码时的返回。
266+
`swagger:route` 下面的一行是该 API 的描述,需要以 `.` 为结尾。`responses:` 定义了 API 的返回参数,例如当 HTTP 状态码是 200 时,返回 `createUserResponse``createUserResponse` 会和 `swagger:response` 的定义进行匹配,匹配成功的 `swagger:response` 就是该 API 返回 200 状态码时的返回。
267267
- `swagger:response`:定义了 API 的返回,格式为 `swagger:response [?response name]`.例如 `getUserResponseWrapper` 中有一个 `Body` 字段,其注释为 `// in:body`,说明该参数是在 HTTP Body 中返回。
268268
`swagger:response` 上的注释是 response 的描述。`api.User` 会被 go-swagger 解析为 Example Value 和 Model,不需要重复编写。
269-
- `swagger:parameters`:定义了 API 的请求参数,格式为 `swagger:parameters [operationid1 operationid2]`。例如 `userRequestParamsWrapper``userRequestParamsWrapper` 上的注释是请求参数的描述。
269+
- `swagger:parameters`:定义了 API 的请求参数,格式为 `swagger:parameters [operationid1 operationid2]`
270+
。例如 `userRequestParamsWrapper``userRequestParamsWrapper` 上的注释是请求参数的描述。
270271

271272
进入 `swagger` 目录,执行如下命令,生成 Swagger API 文档:
272273

0 commit comments

Comments
 (0)