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 자체를 사용해 코드로 표현된 것을 확인할 수 있습니다.

Back to Blog

관련 글

더 보기 »

Zig vs Go: 상수, 변수 및 기본 타입

두 개의 정적이며 강력하게 타입이 지정된 언어인 Go와 Zig는 상수와 변수를 정의하는 방식에서 많은 유사점을 공유합니다. 두 언어 모두 명시적인 타입을 요구합니다.

Gin vs Spring Boot: 자세한 비교

Gin vs Spring Boot: 자세한 비교용 커버 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%...