Skip to content

Commit

Permalink
doc md link update
Browse files Browse the repository at this point in the history
  • Loading branch information
gqcn committed Oct 30, 2024
1 parent efc0b91 commit 5bc0baf
Show file tree
Hide file tree
Showing 115 changed files with 198 additions and 192 deletions.
26 changes: 16 additions & 10 deletions .scripts/replace/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@ package main

import (
"fmt"
"path/filepath"

"github.com/gogf/gf/v2/encoding/gurl"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gfile"
"github.com/gogf/gf/v2/text/gregex"
"github.com/gogf/gf/v2/text/gstr"
)

const (
path = `/Users/john/Workspace/github/gogf/gf-site/versioned_docs/version-1.14.x`
path = `/Users/john/Workspace/github/gogf/gf-site/docs`
)

func main() {
Expand All @@ -20,16 +22,13 @@ func main() {
}
fileNameToMdPathMap := make(map[string]string)
for _, file := range files {
var (
fileName = gfile.Name(file)
mdPath = "/docs" + gstr.Replace(file, path, "")
)
fileNameToMdPathMap[fileName] = mdPath
var fileName = gfile.Name(file)
fileNameToMdPathMap[fileName] = file
// 去掉序号前缀
fileNameWithoutOrder := gstr.SubStrFromEx(fileName, "-")
fileNameToMdPathMap[fileNameWithoutOrder] = mdPath
fileNameToMdPathMap[fileNameWithoutOrder] = file
}

g.DumpJson(fileNameToMdPathMap)
for _, file := range files {
content := gfile.GetContents(file)
newContent, _ := gregex.ReplaceStringFuncMatch(
Expand All @@ -44,12 +43,14 @@ func main() {
link = match[2]
fileName = gfile.Basename(link)
)
if newLink, ok := fileNameToMdPathMap[fileName]; ok {
if absPath, ok := fileNameToMdPathMap[fileName]; ok {
newLink := relativePath(file, absPath)
return fmt.Sprintf(`[%s](%s)`, name, newLink)
}
// 第一找不到,尝试decode
fileName, _ = gurl.Decode(fileName)
if newLink, ok := fileNameToMdPathMap[fileName]; ok {
if absPath, ok := fileNameToMdPathMap[fileName]; ok {
newLink := relativePath(file, absPath)
return fmt.Sprintf(`[%s](%s)`, name, newLink)
}
return fmt.Sprintf(`[%s](%s.md)`, name, link)
Expand All @@ -58,3 +59,8 @@ func main() {
_ = gfile.PutContents(file, newContent)
}
}

func relativePath(path1, path2 string) string {
p, _ := filepath.Rel(gfile.Dir(path1), path2)
return p
}
2 changes: 1 addition & 1 deletion docs/1-框架设计/0-模块化设计.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ require (
- 实现相同功能逻辑的模块较多,选择成本增加
- 项目依赖的模块过多,项目整体的稳定性会受到影响
- 项目依赖的模块过多,项目无从下手是否应当升级这些模块版本
- 模块分散设计,不成体系,难以统一。具体请参考章节: [统一框架设计](/docs/框架设计/统一框架设计)
- 模块分散设计,不成体系,难以统一。具体请参考章节: [统一框架设计](1-统一框架设计.md)

现身说法举例。

Expand Down
6 changes: 3 additions & 3 deletions docs/1-框架设计/1-统一框架设计.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ hide_title: true

本章节我们主要介绍统一开发框架建设的意义和必要性。

> 在开始本章节之前,建议您先了解一下框架的: [模块化设计](/docs/框架设计/模块化设计) ,部分灵感和同感来源于: [小马的经验分享](https://goframe.org/pages/viewpage.action?pageId=3673375)
> 在开始本章节之前,建议您先了解一下框架的: [模块化设计](0-模块化设计.md) ,部分灵感和同感来源于: [小马的经验分享](https://goframe.org/pages/viewpage.action?pageId=3673375)
## 一、技术体系化

Expand Down Expand Up @@ -46,7 +46,7 @@ hide_title: true

![](/markdown/5f76d7bd6d1a06dce9641fec0c497b77.png)

代码层面也是需要有一系列的开发规范,如基本的 代码结构、分层模型、封装设计等,具体请参考: [工程开发设计(🔥重点🔥)](/docs/框架设计/工程开发设计)。统一的框架设计,将会使得所有的业务项目按照统一的代码设计进行编码,形成统一的开发规范。此外,框架的开发工具链也会使得开发规范更容易快速推广和落地实施: [开发工具](/docs/开发工具)
代码层面也是需要有一系列的开发规范,如基本的 代码结构、分层模型、封装设计等,具体请参考: [工程开发设计(🔥重点🔥)](2-工程开发设计/2-工程开发设计.md)。统一的框架设计,将会使得所有的业务项目按照统一的代码设计进行编码,形成统一的开发规范。此外,框架的开发工具链也会使得开发规范更容易快速推广和落地实施: [开发工具](../3-开发工具/3-开发工具.md)

## 三、组件统一化

Expand Down Expand Up @@ -79,7 +79,7 @@ hide_title: true

## 四、版本一致性

版本一致性问题主要来源于项目依赖的模块过多、版本过多,造成版本很难以统一维护和升级。开发框架将模块统一化管理后,更容易保证项目模块的版本一致性。但是需要注意的是,这种一致性不是强一致性,只是降低了模块及版本的维护复杂度,但是不一致性的问题依然存在。关于痛点和改进我们在之前的章节也有介绍过,同时也可以参考章节: [模块化设计](/docs/框架设计/模块化设计) 。这里不再赘述。
版本一致性问题主要来源于项目依赖的模块过多、版本过多,造成版本很难以统一维护和升级。开发框架将模块统一化管理后,更容易保证项目模块的版本一致性。但是需要注意的是,这种一致性不是强一致性,只是降低了模块及版本的维护复杂度,但是不一致性的问题依然存在。关于痛点和改进我们在之前的章节也有介绍过,同时也可以参考章节: [模块化设计](0-模块化设计.md) 。这里不再赘述。

> 行业内也有一些 **版本强一致性** 的代码管理方案,例如采用 `Monorepo` **大仓** 的代码管理方式,却各有利弊,可自行了解,这里不赘述。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ hide_title: true

## 四、更进一步了解

代码分层思想是最基础的工程设计入门,我们需要将分层思想进行落地,具体请参考: [工程目录设计🔥](/docs/框架设计/工程开发设计/工程目录设计)
代码分层思想是最基础的工程设计入门,我们需要将分层思想进行落地,具体请参考: [工程目录设计🔥](1-工程目录设计.md)
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sidebar_position: 1
hide_title: true
---

工程目录设计是代码分层设计的进一步落地,建议您先仔细阅读: [代码分层设计](/docs/框架设计/工程开发设计/代码分层设计)
工程目录设计是代码分层设计的进一步落地,建议您先仔细阅读: [代码分层设计](0-代码分层设计.md)

这是 `GoFrame` 框架针对 **业务项目** 的目录设计,主体的思想来源于三层架构,但在具体实现中,对其进行了一定的改进和细化使其更符合工程实践和时代进步。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sidebar_position: 4
hide_title: true
---

在之前的章节 [代码分层设计](/docs/框架设计/工程开发设计/代码分层设计) 有提及到" **模型**"的概念。
在之前的章节 [代码分层设计](0-代码分层设计.md) 有提及到" **模型**"的概念。

这一章节,我们集中介绍一下在 `GoFrame` 中关于模型的定义以及对应的管理。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ hide_title: true

编译程序,生成二进制文件。

更多介绍请参考文档: [交叉编译-build](/docs/开发工具/交叉编译-build)
更多介绍请参考文档: [交叉编译-build](../../3-开发工具/4-交叉编译-build.md)

- `make image`

编译程序并编译镜像,生成 `Docker` 镜像。

通过 `make image TAG=xxx` 可以指定编译生成的镜像标签名称。

更多介绍请参考文档: [镜像编译-docker](/docs/开发工具/镜像编译-docker)
更多介绍请参考文档: [镜像编译-docker](../../3-开发工具/8-镜像编译-docker.md)

- `make image.push`

Expand Down Expand Up @@ -118,26 +118,26 @@ hide_title: true

用于升级本地的框架到最新社区稳定版本。

更多介绍请参考文档: [框架升级-up](/docs/开发工具/框架升级-up)
更多介绍请参考文档: [框架升级-up](../../3-开发工具/2-框架升级-up.md)

#### 3) `make dao`

用于生成 `DAO/Entity/DO` 代码文件。

更多介绍请参考文档: [数据规范-gen dao](/docs/开发工具/代码生成-gen/数据规范-gen%20dao)
更多介绍请参考文档: [数据规范-gen dao](../../3-开发工具/5-代码生成-gen/1-数据规范-gen dao.md)

#### 4) `make service`

用于解析 `logic` 目录并自动生成内调用接口。该指令在 `Goland IDE` 下往往使用自动化的 `Watcher` 文件变动来自动生成,具体请参考官方文档。

更多介绍请参考文档: [模块规范-gen service](/docs/开发工具/代码生成-gen/模块规范-gen%20service)
更多介绍请参考文档: [模块规范-gen service](../../3-开发工具/5-代码生成-gen/2-模块规范-gen service.md)

#### 5) `make enums`

用于解析指定代码目录(默认为 `api` 目录)并自动生成 `enums` 加载代码。

更多介绍请参考文档: [枚举维护-gen enums](/docs/开发工具/代码生成-gen/枚举维护-gen%20enums)
更多介绍请参考文档: [枚举维护-gen enums](../../3-开发工具/5-代码生成-gen/3-枚举维护-gen enums.md)

#### 6)更多指令

更多的指令支持请参考框架官网工具介绍章节: [开发工具](/docs/开发工具)
更多的指令支持请参考框架官网工具介绍章节: [开发工具](../../3-开发工具/3-开发工具.md)
2 changes: 1 addition & 1 deletion docs/1-框架设计/9-Golang枚举值管理.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ const (

如果只是项目内部使用枚举值比较简单,定义完了内部使用即可,但涉及到跨服务之间调用,或者前后端协作时,效率就比较低了。当服务需要给外部调用者展示接口能力时,往往需要生成 `API` 接口文档(或者接口定义文件,例如 `proto`),往往也需要根据接口文档(文件)生成调用的客户端 `SDK`

如果是接口定义文件,例如 `proto`,往往可以直接查看源码来解决这个问题,问题不大。我们这里主要讨论的是接口文档维护枚举值的问题,特别是前后端协作时通过 `OpenAPI` 标准协议来维护枚举值的问题。这里我们提供了专门的工具来维护这些枚举值,具体请参考章节: [枚举维护-gen enums](/docs/开发工具/代码生成-gen/枚举维护-gen%20enums)
如果是接口定义文件,例如 `proto`,往往可以直接查看源码来解决这个问题,问题不大。我们这里主要讨论的是接口文档维护枚举值的问题,特别是前后端协作时通过 `OpenAPI` 标准协议来维护枚举值的问题。这里我们提供了专门的工具来维护这些枚举值,具体请参考章节: [枚举维护-gen enums](../3-开发工具/5-代码生成-gen/3-枚举维护-gen enums.md)
26 changes: 13 additions & 13 deletions docs/13-常见问题-FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ hide_title: true
使用 `GoFrame` 框架是严谨和安全的,如果程序产生了异常,会默认被框架捕获。如果未被自动捕获,那么可能是由于程序逻辑自行开了新的 `goroutine`,在新的 `goroutine` 中产生了异常。因此这里有两个方案可供大家选择:

- 不建议在请求中再开 `goroutine` 来处理请求,这样或使得 `goroutine` 快速膨胀,当 `goroutine` 多了之后也会在 `Go` 引擎层面影响程序的整体调度。
- 如果实在有必要新开 `goroutine` 的场景下,可以考虑使用 `grpool.AddWithRecover` 来创建新的 `goroutine`,见名知意,它会自动捕获异常。更详细的介绍请参考: [协程管理-grpool](/docs/组件列表/系统相关/协程管理-grpool)
- 如果实在有必要新开 `goroutine` 的场景下,可以考虑使用 `grpool.AddWithRecover` 来创建新的 `goroutine`,见名知意,它会自动捕获异常。更详细的介绍请参考: [协程管理-grpool](5-组件列表/1-系统相关/16-协程管理-grpool.md)

### 2、 `json` 输出时屏蔽掉一些字段

Expand Down Expand Up @@ -70,7 +70,7 @@ D:\Program Files\Go\bin\pkg\mod\github.com\gogf\[email protected]\net\ghttp\internal\cl

## 三、数据库相关

请参考章节: [ORM常见问题](/docs/核心组件/数据库ORM/ORM常见问题)
请参考章节: [ORM常见问题](4-核心组件/10-数据库ORM/11-ORM常见问题.md)

## 四、使用相关

Expand All @@ -79,7 +79,7 @@ D:\Program Files\Go\bin\pkg\mod\github.com\gogf\[email protected]\net\ghttp\internal\cl
不同环境指的是:开发环境/测试环境/预发环境/生产环境等。

- 首先,在一些互联网项目中,特别是分布式或者微服务化的架构下,一般会使用配置管理中心,不同的环境会对应不同的配置管理中心,所以这样的场景不会存在这样的问题。
- 其次,如果是传统的项目管理方式下,可能会将配置文件放到代码仓库中共同管理,这样的方式是不推荐的。如果您仍然想要这么做,您可以通过系统环境变量或者命令行启动参数,让程序自动选择配置文件或者指定配置目录,参考 [配置管理](/docs/核心组件/配置管理) 章节。例如: `./app --gf.gcfg.file config-prod.toml ` 则通过命令行启动参数的方式将默认读取的配置文件修改为了 `config-prod.toml` 文件。
- 其次,如果是传统的项目管理方式下,可能会将配置文件放到代码仓库中共同管理,这样的方式是不推荐的。如果您仍然想要这么做,您可以通过系统环境变量或者命令行启动参数,让程序自动选择配置文件或者指定配置目录,参考 [配置管理](4-核心组件/3-配置管理/3-配置管理.md) 章节。例如: `./app --gf.gcfg.file config-prod.toml ` 则通过命令行启动参数的方式将默认读取的配置文件修改为了 `config-prod.toml` 文件。



Expand All @@ -90,7 +90,7 @@ D:\Program Files\Go\bin\pkg\mod\github.com\gogf\[email protected]\net\ghttp\internal\cl

### 2、 `glog with "ERROR: logging before flag.Parse"`

`Golang` 官方有个简单的日志库包名也叫做 `glog`,检查你文件顶部 `import` 的包名,将 `github.com/golang/glog` 修改为框架的日志组件即可,日志组件使用请参考: [日志组件](/docs/核心组件/日志组件)
`Golang` 官方有个简单的日志库包名也叫做 `glog`,检查你文件顶部 `import` 的包名,将 `github.com/golang/glog` 修改为框架的日志组件即可,日志组件使用请参考: [日志组件](4-核心组件/4-日志组件/4-日志组件.md)

### 3、 `gcron``http` 如何同时使用?

Expand Down Expand Up @@ -122,21 +122,21 @@ func main() {

| Tag(简写) | 全称 | 描述 | 相关文档 |
| --- | --- | --- | --- |
| `v` | `valid` | 数据校验标签。 | [Struct校验-基本使用](/docs/核心组件/数据校验/数据校验-参数类型/数据校验-Struct校验/Struct校验-基本使用) |
| `p` | `param` | 自定义请求参数匹配。 | [请求输入-对象处理](/docs/WEB服务开发/请求输入/请求输入-对象处理) |
| `d` | `default` | 请求参数默认值绑定。 | [请求输入-默认值绑定](/docs/WEB服务开发/请求输入/请求输入-默认值绑定) |
| `orm` | `orm` | ORM标签,用于指定表名、关联关系。 | [数据规范-gen dao](/docs/开发工具/代码生成-gen/数据规范-gen%20dao)<br />[模型关联-静态关联-With特性](/docs/核心组件/数据库ORM/ORM链式操作/ORM链式操作-模型关联/模型关联-静态关联-With特性) |
| `v` | `valid` | 数据校验标签。 | [Struct校验-基本使用](4-核心组件/6-数据校验/3-数据校验-参数类型/1-数据校验-Struct校验/0-Struct校验-基本使用.md) |
| `p` | `param` | 自定义请求参数匹配。 | [请求输入-对象处理](7-WEB服务开发/3-请求输入/1-请求输入-对象处理.md) |
| `d` | `default` | 请求参数默认值绑定。 | [请求输入-默认值绑定](7-WEB服务开发/3-请求输入/4-请求输入-默认值绑定.md) |
| `orm` | `orm` | ORM标签,用于指定表名、关联关系。 | [数据规范-gen dao](3-开发工具/5-代码生成-gen/1-数据规范-gen dao.md)<br />[模型关联-静态关联-With特性](4-核心组件/10-数据库ORM/1-ORM链式操作/4-ORM链式操作-模型关联/1-模型关联-静态关联-With特性.md) |
| `dc` | `description` | 通用结构体属性描述,ORM和接口都用到。属于框架默认的属性描述标签。 | |

其他:

- 命令行结构化管理参数: [命令管理-结构化参数](/docs/核心组件/命令管理/命令管理-结构化参数)
- 命令行结构化管理参数: [命令管理-结构化参数](4-核心组件/2-命令管理/4-命令管理-结构化参数.md)
- 框架常用标签标签集中管理到了 `gtag` 组件下: [https://github.com/gogf/gf/blob/master/util/gtag/gtag.go](https://github.com/gogf/gf/blob/master/util/gtag/gtag.go)
- 在接口文档章节,由于采用了标签形式生成 `OpenAPI` 文档,因此标签比较多,具体请参考章节: [接口文档](/docs/WEB服务开发/接口文档)
- 在接口文档章节,由于采用了标签形式生成 `OpenAPI` 文档,因此标签比较多,具体请参考章节: [接口文档](7-WEB服务开发/2-接口文档/2-接口文档.md)

### 5、 `HTTP Server` 出现 `context cancel` 报错

从框架 `v2.5` 版本开始,框架的 `HTTP Server``Request` 对象将会直接继承与标准库的 `http.Request` 对象,其中就包括其中的 `context` 上下文对象,具体请参考发布记录: [v2.5 2023-07-17](/docs/版本发布记录/v2.5%202023-07-17)。当客户端例如浏览器、 `HTTP Client` 取消请求时,服务端会接收到 `context cancel` 操作( `context.Done`),但是服务端并不会直接报出 `context cancel` 的错误。这种错误往往在业务逻辑调用了底层的数据库、消息组件等组件时,由这些组件识别到 `context cancel` 操作,将会停止执行并往上抛出 `context cancel` 错误提醒上层已经终止执行。
从框架 `v2.5` 版本开始,框架的 `HTTP Server``Request` 对象将会直接继承与标准库的 `http.Request` 对象,其中就包括其中的 `context` 上下文对象,具体请参考发布记录: [v2.5 2023-07-17](/docs/版本发布记录/v2.5%202023-07-17.md)。当客户端例如浏览器、 `HTTP Client` 取消请求时,服务端会接收到 `context cancel` 操作( `context.Done`),但是服务端并不会直接报出 `context cancel` 的错误。这种错误往往在业务逻辑调用了底层的数据库、消息组件等组件时,由这些组件识别到 `context cancel` 操作,将会停止执行并往上抛出 `context cancel` 错误提醒上层已经终止执行。

这是符合标准库设计的行为,客户端终止请求后,服务端也没有继续执行下去的必要。

Expand All @@ -161,7 +161,7 @@ export GOPROXY=https://goproxy.cn

具体请看:

- [Go Module](/docs/项目开发/准备工作/Go%20Module)
- [Go Module](16-其他资料/0-准备工作/1-Go Module.md)
- [https://goproxy.cn](https://goproxy.cn)

### 2、 `Linux` 下安装 `gf` 提示命令不存在 `command not found`
Expand Down Expand Up @@ -192,4 +192,4 @@ Build Time: 2021-03-30 15:43:22

### 3、 `Win10` 提示 `gf` 命令不存在

解决办法:安装 `gf.exe` 参考: [开发工具](/docs/开发工具)
解决办法:安装 `gf.exe` 参考: [开发工具](3-开发工具/3-开发工具.md)
2 changes: 1 addition & 1 deletion docs/16-其他资料/5-如何从v1愉快升级到v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ go get -u github.com/gogf/gf/v2@latest

## 工程目录的调整

如果您使用的是 `GoFrame` 官方推荐的工程目录结构,可以参考最新的工程目录结构手动调整即可: [工程目录设计🔥](/docs/框架设计/工程开发设计/工程目录设计)
如果您使用的是 `GoFrame` 官方推荐的工程目录结构,可以参考最新的工程目录结构手动调整即可: [工程目录设计🔥](../1-框架设计/2-工程开发设计/1-工程目录设计.md)

需要注意的是,最新的 `cli` 工具不再支持旧版工程目录的项目创建。

Expand Down
Loading

0 comments on commit 5bc0baf

Please sign in to comment.