Zig vs Go:init 和 run
发布: (2026年1月13日 GMT+8 07:59)
2 min read
原文: Dev.to
Source: Dev.to
初始化
在 Go 中我们使用以下命令初始化模块:
go mod init module-name
在 Zig 中等价的操作仅为:
zig init
Zig 不需要像 Go 那样显式的“模块路径”,因为包导入与 URL 并没有直接对应关系。这使得这种方式更灵活,虽然缺少统一的标准化。
Hello World 示例
Go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hell world")
}
Zig
const std = @import("std");
pub fn main() !void {
std.debug.print("Hell World", .{});
}
入口点
两种语言都将 main 作为应用程序的入口点。
main函数都不接受输入参数;参数必须通过标准库函数来处理。- 返回值的处理方式不同:Zig 将
main当作普通函数,可以返回错误或值(例如void)。在 Go 中,成功返回是隐式的,错误通常在main内部使用os.Exit(1)或panic("error!")处理。
运行与构建
运行
# Go
go run main.go
# Zig
zig run src/main.zig
构建
# Go
go build main.go
# Zig
zig build src/main.zig
使用 Zig 构建时,会创建一个 zig-out/bin 文件夹,其中包含生成的可执行文件。该文件夹是一种约定;查看 build.zig 可以发现,构建、运行和测试的定义并不是硬编码在工具里,而是通过代码表达的,使用的正是 Zig 本身作为语言。