diff --git a/src/project-structure/busi-mode.svg b/src/project-structure/busi-mode.svg new file mode 100644 index 0000000..b87d4c6 --- /dev/null +++ b/src/project-structure/busi-mode.svg @@ -0,0 +1,36 @@ +
项目根目录
go.mod
go.sum
main.go
global
db.go
redis.go
user
entity.go
service.go
controller.go
payment
entity.go
controller.go
order
entitiy.go
service.go
controller.go
accounting
entity.go
controller.go
commodity
entity.go
service.go
controller.go
\ No newline at end of file diff --git a/src/project-structure/create.md b/src/project-structure/create.md new file mode 100644 index 0000000..d19f422 --- /dev/null +++ b/src/project-structure/create.md @@ -0,0 +1,51 @@ +# 创建一个新项目 + +在引入 Go Module 之前,创建一个 Go 语言项目是非常简单的事情,只需要在`$GOPATH/src`目录中新建一个目录就可以开始开发了。但是这种开发方式最令人诟病的就是无法控制依赖库的版本,因为`go get`命令会把项目中的依赖也下载到`$GOPATH/src`目录中,这样一来,如果两个项目引用了相同的依赖库,那么这个依赖库就有可能会因为新项目中运行的`go get`命令而升级,那之前的旧项目就惨了,很有可能这个依赖库发生了断代升级,直接导致旧项目需要强制更新。 + +在引入 Go Module 之后,这个问题得到了全面的改善。首先就是 Go 的项目不需要必须创建在`$GOPATH/src`目录里了,其次就是项目中的依赖也是可以得到比较有效的控制和管理了。 + +一个新的 Go 项目现在是通过`go mod`命令创建的,使用这个命令创建项目的时候需要注意,这个命令只会创建 Go 项目本身,并不会创建项目所在的目录。所以在执行`go mod`命令之前,我们需要首先自行创建项目所在的目录。这里需要记住的是,按照上面所说的,现在基于 Go Module 创建的 Go 项目已经不必放置在`$GOPATH/src`目录中了。 + +例如现在要创建一个电商网站服务端项目,就可以执行以下命令来完成创建。 + +```bash +mkdir ebusiness +cd ebusiness +go mod init archgrid.xyz/ebusiness +``` + +在`go mod init`命令后面所接的参数不是之前创建的目录名字,而是所要创建的这个项目的名字。这个名字可以随意起,但是需要注意的是,这个名字在习惯上跟项目所在的 Git 版本库的路径是一样的,例如项目所在的版本库路径是`https://github.com/example/ebusiness`,那么这个项目就最好起名为`github.com/example/ebusiness`,这样做的目的主要是为了方便 Go 在`go.mod`文件中记录项目的依赖,以及当前项目做为一个库被其他项目使用时,可以不必使用`replace`重新定义库所在的位置。 + +刚创建好的项目中一般只有`go.mod`一个文件。这个文件里的内容十分简单,如下所示。 + +``` +module archgrid.xyz/ebusiness + +go 1.20 +``` + +现在这个`go.mod`文件只是一个最原始的状态。里面只是记录了当前这个项目的名称,这是由保留字`module`定义的。还定义了当前项目所依赖的 Go 版本,这是由保留字`go`来定义的,如果这个项目需要使用特定版本的 Go,那么可以修改这里的定义。 + +在绝大多数情况下,`go.mod`文件的内容是不需要我们手动去编辑的,每次我们在执行`go get`和`go mod tidy`命令的时候,`go.mod`文件都会自动的被修改。当然这种情况也是有特例的,比如之前提到过的使用`replace`定义库的别名路径,这些用法会在后面介绍`go mod`命令时做更加详细的介绍。 + +现在就可以在这个项目的目录里新建一个`main.go`文件来编写 Go 项目的主启动文件了。 + +```admonish tip +`main.go`和`lib.go`都是Go项目中的习惯上对于主启动文件的命名,你也可以使用其他的名称。 +``` + +以下是一个最简单的`main.go`文件的内容,它只会做一件事情,就是在终端或者控制台上输出一个`Hello World!`。 + +```go +package main + +import ( + "fmt" +) + +func main() { + fmt.Println("Hello World!") +} +``` + +这可以算是一个最小的 Go 语言程序。 diff --git a/src/project-structure/mvc-mode.svg b/src/project-structure/mvc-mode.svg new file mode 100644 index 0000000..22a1291 --- /dev/null +++ b/src/project-structure/mvc-mode.svg @@ -0,0 +1,36 @@ +
项目根目录
go.mod
go.sum
main.go
global
db.go
redis.go
entities
commodity.go
order.go
payment.go
accounting.go
user.go
repositories
order.go
user.go
accounting.go
commodity.go
services
order.go
user.go
controllers
user.go
commodity.go
order.go
accounting.go
\ No newline at end of file