按照编程界的传统,学习一门新语言的第一步就是编写并运行"Hello, World"程序。通过这个简单的例子,你将了解Go语言的基本文件结构、代码组织方式以及编译运行流程。
go version 命令。
创建一个新的目录(例如 hello),并在其中新建一个名为 main.go 的文件。使用任何文本编辑器(VS Code、Vim、Notepad++等)输入以下代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
代码解释:
package main — 声明这个文件属于 main 包。在Go中,可执行程序必须包含一个 main 包,并且该包中必须有一个 main() 函数作为程序入口。import "fmt" — 导入标准库中的 fmt 包,该包提供了格式化的输入输出功能,如 Println。func main() { ... } — 定义 main 函数,程序从这里开始执行。左花括号 { 必须与函数声明在同一行,这是Go语言的语法要求。fmt.Println("Hello, World!") — 调用 fmt 包的 Println 函数,将字符串输出到控制台并自动添加换行符。Go提供了两种执行方式:直接运行源码(类似解释型语言)或编译为二进制文件再执行。
go run — 直接运行在终端中切换到 main.go 所在的目录,执行:
go run main.go
你将看到输出:
go run 命令会编译源码、执行生成的临时二进制文件,然后自动清理。适合开发调试阶段快速验证。
go build — 编译后执行首先编译生成可执行文件:
go build main.go
该命令会在当前目录生成一个与源码同名的可执行文件(Windows下为 main.exe,Linux/macOS下为 main)。然后直接运行它:
# Linux/macOS
./main
# Windows
main.exe
go build 适合生产部署,编译出的二进制文件没有外部依赖,可以拷贝到其他相同操作系统的机器上直接运行。
set GOOS=linux&& set GOARCH=amd64&& go build main.go(Windows PowerShell语法略有不同)。这一特性使得Go非常适合微服务和云原生应用开发。
package 开头,表示该文件属于哪个包。包是Go代码组织和复用的基本单位。一个目录下的所有Go文件必须声明为同一个包名(除非使用 package main_test 等特殊情况)。
import 关键字导入其他包提供的功能。标准库的包位于 $GOROOT/src 中,第三方包则需要通过 go get 下载到 $GOPATH 或使用模块管理。
func 关键字定义。对于可执行程序,main 包中的 main 函数是程序入口,不接受任何参数,也没有返回值。程序退出时会返回0(正常)或非0(错误)。
// 和多行注释 /* ... */。注释不会被编译,通常用于解释代码逻辑或生成文档。
fmt 包的更多输出方式fmt 包除了 Println 外,还有其他常用函数:
package main
import "fmt"
func main() {
name := "Gopher"
age := 10
fmt.Print("Hello, ") // 不换行输出
fmt.Println("World!") // 输出并换行
fmt.Printf("Name: %s, Age: %d\n", name, age) // 格式化输出
}
运行以上代码将输出:
{ 与函数声明、控制语句在同一行。若换行会导致编译错误。_)。例如仅导入 fmt 但不调用,编译将报错 imported and not used。.go 结尾,但文件名本身可以任意(除了测试文件以 _test.go 结尾)。main 函数所在的文件通常命名为 main.go,但并非强制。time.Now() 函数,需要导入 time 包)。试着用 go build 编译后,将生成的二进制文件复制到另一个目录,看看能否正常运行。
成功运行Hello World后,你已经迈出了Go语言编程的第一步。接下来的章节将深入学习Go的基础语法,包括变量、常量、数据类型、控制流(if、for、switch)和函数的高级用法。