post:基本完成创建项目一章的内容。
This commit is contained in:
parent
1cab115d2c
commit
5250b78806
36
src/project-structure/busi-mode.svg
Normal file
36
src/project-structure/busi-mode.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 775 KiB |
51
src/project-structure/create.md
Normal file
51
src/project-structure/create.md
Normal file
@ -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 语言程序。
|
36
src/project-structure/mvc-mode.svg
Normal file
36
src/project-structure/mvc-mode.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 775 KiB |
Loading…
x
Reference in New Issue
Block a user