Go 语言入门系列(一):环境搭建与第一个程序

一、安装 Go

从 go.dev/dl 下载安装包(macOS 可 brew install go)。验证:

$ go version
go version go1.22.0

go env 查看配置,初学只需知道 GOPATH(工作目录)和 GOMODCACHE(依赖缓存),默认即可。

二、第一个程序

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go")
}

go run hello.go 输出 Hello, Go。逐行理解:

  • package main:每个文件必须声明包。main 是特殊包名,表示可执行程序;其他包名只能作为库被引用。
  • import "fmt":导入标准库,导入未使用会编译失败。
  • func main():入口函数,固定签名。
  • 左花括号必须与语句同行,否则编译报错。

三、run / build / install 的区别

  • go run:编译并立即运行,产物在临时目录。开发验证用。
  • go build:在当前目录生成二进制,不依赖 Go 环境,可拷走直接运行。交付用。
  • go install:编译并装到 $GOPATH/bin,用于安装工具。

记忆:开发 run,交付 build,装工具 install。

四、Go Modules

$ go mod init example.com/hello-go

生成 go.mod:

module example.com/hello-go
go 1.22
  • module 行是模块路径,也是包导入前缀;开源库应写真实仓库地址。
  • go 行声明语言版本。

子包导入规则:导入路径 = 模块路径 + 子目录路径。例如 greet/greet.go 声明 package greet,main.go 用 import "example.com/hello-go/greet",调用 greet.Hello()。

五、常用命令

  • go fmt ./...:格式化,Go 风格强制统一
  • go vet ./...:静态检查,抓 Printf 参数不匹配等 bug
  • go doc fmt.Println:终端查文档
  • go mod tidy:清理/补全依赖
  • ./... 表示递归所有包,几乎所有命令通用

工作流:写码 → fmt → vet → run 验证 → 提交。

六、一个坑:包名与目录名

约定包名与目录名一致。导入写的是目录路径,调用用的是包名。不一致时可起别名:

import g "example.com/hello-go/greet"
g.Hello("Gopher")

初学最稳妥:目录名 = 包名。

七、小结

  • go mod init 建模块,go.mod 记录路径与依赖
  • 包分可执行(main)与库两类
  • run/build/install 分工明确
  • fmt、vet、doc、mod tidy 构成日常工作流

练习:给项目加一个 calc 子包提供 Add 函数,在 main 调用,go build 后拷到别处直接运行,体会 Go 交付的简单。

下一篇讲语法主干:变量、零值、类型、控制流、函数。

posted @ 2026-10-31 04:34  sunlon  阅读(4)  评论(0)    收藏  举报