Featured image of post Hello Go

Hello Go

手把手教你开始自己第一个Go项目

package xxx is not in std

我相信很多新手入坑Go都会遇到这个错误。

1
echo $GOPATH

网上很多教程都提示修改GOPATH或将项目源码链接到$GOPATH所在目录。其实这是不对的,至少现在不需要这样修改。

下面我就手把手教大家开始自己第一个Go项目。

代码组织

  • 一个目录就是一个包(package)
  • 多个包组成一个模块(module)
  • 模块由go.mod定义

一般情况:一个项目由一个模块和多个包组成

代码结构

1
2
3
4
5
6
7
example1
├── bye
│   └── bye.go
├── go.mod
├── hello
│   └── hello.go
└── main.go
  • 项目位置:example1
  • 项目有一个模块:由go.mod定义
  • 项目有两个包:hellobye

模块定义

1
2
3
# 注意:这里路径名与模块名的不同
$ cd example1 && go mod init example
$ cat go.mod
1
2
3
module example

go 1.21.4

模块名与代码路径没有绝对关系

导入包

1
cat main.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
package main

import (
	"example/bye"
	"example/hello"
	"fmt"

	"github.com/google/go-cmp/cmp"
)

func main() {
	hello.PrintHello()

	diff := cmp.Diff("aa bb", "aa cc")
	fmt.Printf("%v", diff)

	bye.PrintBye()
}
  • 导入内置包:import "fmt"
  • 导入本地包:import 模块名/包名
  • 导入远程包:import "github.com/google/go-cmp/cmp"

下载远程包并生成依赖:

1
go mod tidy
1
2
3
go: finding module for package github.com/google/go-cmp/cmp
go: downloading github.com/google/go-cmp v0.6.0
go: found github.com/google/go-cmp/cmp in github.com/google/go-cmp v0.6.0

现在go.mod的样子:

1
cat go.mod
1
2
3
4
5
module example

go 1.21.4

require github.com/google/go-cmp v0.6.0

编译

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cd example1
# 在本地生成可执行文件 - 注意目标文件名的不同
go build && ./example       # 编译当前目录
go build . && ./example     # 同上面一样
go build main.go && ./main  # 编译指定文件
# 不在本地生成可执行文件
go run example              # 运行模块
go run main.go              # 运行指定文件
# 安装到$GOPATH - 注意目标文件名的不同
go install . && $GOPATH/bin/example         # 安装当前模块 
go install example && $GOPATH/bin/example   # 安装指定模块
go install main.go && $GOPATH/bin/main      # 安装指定文件

测试

1
cat hello_test.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package hello

import (
	"example/hello"
	"testing"
)

func TestHello(t *testing.T) {
	hello.PrintHello()
}
  • 测试文件以_test.go结尾
  • 测试函数以Test开头
  • 只要调用t.Errort.Fail就表示失败
1
go test hello_test.go
1
ok  	command-line-arguments	0.005s

参考


最后更新于 2023-12-13
小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次