Zig vs Go: init와 run
발행: (2026년 1월 13일 오전 08:59 GMT+9)
3 min read
원문: Dev.to
Source: Dev.to
초기화
Go에서는 모듈을 다음과 같이 초기화합니다:
go mod init module-name
Zig에서는 동일한 작업을 간단히 다음과 같이 수행합니다:
zig init
Zig은 패키지 임포트와 URL 사이에 직접적인 대응 관계가 없기 때문에 Go처럼 명시적인 “모듈 경로”가 필요하지 않습니다. 이로 인해 접근 방식이 더 유연해지지만 표준화는 덜합니다.
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 자체를 사용해 코드로 표현된 것을 확인할 수 있습니다.