专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2025-03-04 10:47:43 博客文章 13 ℃ 0 评论

本文永久链接:
https://www.xy1413.com/p/hello_go/

`package xxx is not in std`

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

echo $GOPATH

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

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

代码组织

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

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

代码结构

example1
├── bye
│   └── bye.go
├── go.mod
├── hello
│   └── hello.go
└── main.go
  • 项目位置:example1
  • 项目有一个模块:由go.mod定义
  • 项目有两个包:hello和bye

模块定义

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

go 1.21.4

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

导入包

cat main.go
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"

下载远程包并生成依赖:

go mod tidy
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的样子:

cat go.mod
module example

go 1.21.4

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

编译

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      # 安装指定文件

测试

cat hello_test.go                                                                                    $? ```
```go
package hello

import (
	"example/hello"
	"testing"
)

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

参考

  • How to Write Go Code

版权声明 ?

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表