Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

Hướng Dẫn Zig Cho Người Mới Bắt Đầu: Cách Cài Đặt và Sử Dụng Zig

中村 拓也

中村 拓也

Updated on tháng 4 2, 2025

Zig là một ngôn ngữ lập trình hiện đại, đa năng, được thiết kế để trở nên vững chắc, tối ưu và dễ bảo trì. Với trọng tâm là sự đơn giản và rõ ràng, Zig cung cấp sự kiểm soát cấp thấp đồng thời tránh dòng chảy điều khiển ẩn và phân bổ. Hướng dẫn này sẽ hướng dẫn bạn qua quy trình cài đặt, tạo chương trình Zig đầu tiên của bạn và chạy thử nghiệm. Đến cuối, bạn sẽ có nền tảng vững chắc để khám phá ngôn ngữ mạnh mẽ này hơn nữa.

Khi chúng ta đang khám phá các công cụ lập trình mạnh mẽ, đáng nói đến là Apidog - lựa chọn tối ưu cho Postman trong việc phát triển và kiểm tra API. Apidog kết hợp tài liệu API, thiết kế, mô phỏng, kiểm tra và gỡ lỗi thành một nền tảng liền mạch.

button

Với giao diện trực quan, các tính năng hợp tác và tích hợp kiểm soát phiên bản liền mạch, Apidog cải thiện đáng kể hiệu suất công việc cho các nhà phát triển làm việc với API. Bộ tính năng toàn diện của nó bao gồm kiểm tra tự động, quản lý môi trường, xếp chồng yêu cầu và xác nhận phản hồi thông minh, khiến nó trở thành một công cụ thiết yếu cho các nhóm phát triển hiện đại.

button

Trước khi bắt đầu lập trình với Zig, hãy cân nhắc thêm Apidog vào bộ công cụ lập trình của bạn để nâng cao năng suất tổng thể khi làm việc với API và dịch vụ web.

Phần 1: Cài đặt Zig

Trước khi bạn có thể bắt đầu lập trình trong Zig, bạn cần cài đặt trình biên dịch và các công cụ. Quy trình cài đặt khác nhau tùy thuộc vào hệ điều hành của bạn.

Cài đặt trên Linux

Bạn có hai tùy chọn chính để cài đặt Zig trên Linux:

Tùy chọn 1: Sử dụng trình quản lý gói của bản phân phối của bạn

Hầu hết các bản phân phối Linux lớn đều đóng gói phiên bản Zig mới nhất. Đây thường là cách tiếp cận dễ nhất:

# Đối với Debian/Ubuntu
sudo apt install zig

# Đối với Fedora
sudo dnf install zig

# Đối với Arch Linux
sudo pacman -S zig

Tùy chọn 2: Cài đặt thủ công

Nếu bản phân phối của bạn không có Zig hoặc bạn cần một phiên bản cụ thể:

Tải xuống một phiên bản đã được xây dựng trước của Zig từ trang web chính thức phù hợp với kiến trúc CPU của bạn

Để kiểm tra kiến trúc của bạn, hãy sử dụng:

uname -m

Giải nén tệp nén bằng tar:

tar xf zig-linux-x86_64-0.13.0.tar.xz

Thêm tệp nhị phân Zig vào PATH của bạn:

echo 'export PATH="$HOME/zig-linux-x86_64-0.13.0:$PATH"' >> ~/.bashrc

Áp dụng các thay đổi:

source ~/.bashrc

Cài đặt trên Windows

Người dùng Windows có một số tùy chọn:

Tùy chọn 1: Sử dụng trình quản lý gói

# Sử dụng Chocolatey
choco install zig

# Sử dụng Winget
winget install zig.zig

# Sử dụng Scoop
scoop install zig

Tùy chọn 2: Cài đặt thủ công

Tải xuống một phiên bản đã được xây dựng trước của Zig cho Windows phù hợp với kiến trúc CPU của bạn (hầu hết các hệ thống Windows sử dụng x86_64/AMD64)

Kiểm tra kiến trúc của bạn bằng:

$Env:PROCESSOR_ARCHITECTURE

Giải nén tệp ZIP

Thêm Zig vào PATH của bạn:

Đối với Người dùng Hiện tại:

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
    "User"
)

Đối với Hệ thống Toàn cầu:

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
    "Machine"
)

Đóng và mở lại terminal của bạn

Cài đặt trên macOS

Cách đơn giản nhất để cài đặt Zig trên macOS là sử dụng Homebrew:

brew install zig

Xác minh Cài đặt của Bạn

Sau khi cài đặt, xác minh rằng Zig đã được cài đặt đúng cách bằng cách chạy:

zig version

Bạn sẽ thấy đầu ra như:

0.13.0

Phần 2: Xin chào, Thế giới! trong Zig

Giờ đây, Zig đã được cài đặt, hãy cùng tạo chương trình Zig đầu tiên của bạn: ví dụ truyền thống "Xin chào, Thế giới!".

Tạo Tệp Chương Trình

  1. Tạo một tệp mới có tên main.zig
  2. Mở nó bằng trình soạn thảo văn bản mà bạn ưa thích
  3. Thêm mã sau:
const std = @import("std");

pub fn main() void {
    std.debug.print("Xin chào, {s}!\\\\n", .{"Thế giới"});
}

Hãy cùng phân tích mã này:

  • const std = @import("std"); nhập thư viện chuẩn của Zig
  • pub fn main() void { khai báo hàm chính đóng vai trò là điểm khởi đầu cho chương trình của bạn
  • std.debug.print("Xin chào, {s}!\\\\n", .{"Thế giới"}); in "Xin chào, Thế giới!" ra luồng lỗi chuẩn (stderr)
  • Tham số {s} là một chỉ thị định dạng cho chuỗi, và .{"Thế giới"} là cách Zig truyền tham số đến các chỉ thị định dạng

Chạy Chương Trình

Để xây dựng và chạy chương trình của bạn, hãy sử dụng lệnh sau:

zig run main.zig

Điều này biên dịch mã của bạn và thực thi ngay lập tức. Bạn sẽ thấy đầu ra:

Xin chào, Thế giới!

Lưu Ý Quan Trọng về Mã Hóa Tệp

Zig yêu cầu mã hóa UTF-8 cho các tệp nguồn. Nếu bạn gặp lỗi như bytes không hợp lệ, tệp của bạn có thể có mã hóa khác. Để khắc phục điều này:

zig fmt main.zig

Điều này sẽ mã hóa lại tệp của bạn thành UTF-8. Sau đó, mở lại tệp trong trình soạn thảo của bạn.

Phần 3: Chạy Kiểm Tra trong Zig

Zig có một khung thử nghiệm tích hợp giúp việc viết và chạy kiểm tra trở nên dễ dàng. Hiểu cách sử dụng kiểm tra là điều cần thiết khi bạn học Zig, đặc biệt là vì nhiều ví dụ trong tài liệu Zig được cung cấp dưới dạng thử nghiệm.

Tạo Một Bài Kiểm Tra Đơn Giản Thành Công

Hãy tạo một tệp kiểm tra cơ bản:

  1. Tạo một tệp mới có tên test_pass.zig
  2. Thêm mã sau:
const std = @import("std");
const expect = std.testing.expect;

test "luôn thành công" {
    try expect(true);
}

Mã này nhập mô-đun kiểm tra, sau đó định nghĩa một bài kiểm tra có tên "luôn thành công" mà mong đợi true là đúng (mà nó luôn như vậy).

Để chạy bài kiểm tra này:

zig test test_pass.zig

Bạn sẽ thấy đầu ra tương tự như:

Tất cả 1 bài kiểm tra đều thành công.

Tạo Một Bài Kiểm Tra Thất Bại

Giờ đây, hãy tạo một bài kiểm tra thất bại để hiểu cách Zig xử lý các lỗi kiểm tra:

  1. Tạo một tệp có tên test_fail.zig
  2. Thêm mã sau:
const std = @import("std");
const expect = std.testing.expect;

test "luôn thất bại" {
    try expect(false);
}

Bài kiểm tra này mong đợi false là đúng, điều này hiển nhiên sẽ thất bại.

Khi bạn chạy:

zig test test_fail.zig

Bạn sẽ thấy thông báo lỗi như:

Bài kiểm tra [1/1] test.luôn thất bại... THẤT BẠI (TestUnexpectedResult)
/usr/lib/zig/std/testing.zig:515:14: 0x2241ef trong expect (kiểm tra)
if (!ok) return error.TestUnexpectedResult;
^
[...]/test_fail:5:5: 0x224305 trong test.luôn thất bại (kiểm tra)
try expect(false);
^
0 đã qua; 0 đã bỏ qua; 1 thất bại.

Hiểu Biện Pháp Xử Lý Lỗi trong Các Bài Kiểm Tra

Từ khóa try là rất quan trọng trong các bài kiểm tra Zig. Nó cố gắng thực thi một hàm có thể trả về một lỗi. Nếu một lỗi được trả về, nó sẽ truyền đạt lỗi đó cho người gọi.

Hãy thử chạy cùng một bài kiểm tra mà không có từ khóa try:

test "sẽ không biên dịch đúng" {
    expect(false);
}

Bạn sẽ gặp lỗi biên dịch vì bạn không xử lý lỗi tiềm năng mà expect() có thể trả về.

Phần 4: Các Kiến Thức Cơ Bản về Zig cho Người Mới Bắt Đầu

Biến và Hằng Số

Trong Zig, bạn định nghĩa biến và hằng số như sau:

const std = @import("std");

pub fn main() void {
    // Hằng số (không thể thay đổi)
    const fixed_value = 42;

    // Biến (có thể thay đổi)
    var changeable_value = 10;
    changeable_value = 20; // Điều này được phép

    // Bạn có thể chỉ định kiểu rõ ràng
    const explicit_integer: i32 = 1234;
    var explicit_float: f64 = 3.14159;

    std.debug.print("Cố định: {d}, Có thể thay đổi: {d}\\\\n",
        .{fixed_value, changeable_value});
}

Các Kiểu Dữ Liệu Cơ Bản

Zig có một số kiểu dữ liệu tích hợp:

const std = @import("std");

pub fn main() void {
    // Số nguyên
    const i: i32 = -42;       // Số nguyên có dấu 32-bit
    const u: u32 = 42;        // Số nguyên không dấu 32-bit

    // Số thực
    const f: f32 = 3.14;      // Số thực 32-bit
    const d: f64 = 2.71828;   // Số thực 64-bit

    // Boolean
    const b: bool = true;

    // Ký tự và chuỗi
    const c: u8 = 'A';                    // Ký tự (như số nguyên)
    const s: []const u8 = "Xin chào, Zig!";  // Chuỗi (một lát cắt của u8)

    // Mảng với kích thước cố định được biết trước tại thời điểm biên dịch
    const arr = [5]u8{1, 2, 3, 4, 5};

    std.debug.print("Số nguyên: {d}, Số thực: {d}\\\\n", .{i, f});
    std.debug.print("Chuỗi: {s}\\\\n", .{s});
}

Hàm

Các hàm trong Zig được định nghĩa bằng từ khóa fn:

const std = @import("std");

// Hàm cơ bản với tham số và giá trị trả về
fn add(a: i32, b: i32) i32 {
    return a + b;
}

// Hàm có thể trả về một lỗi
fn divide(a: f32, b: f32) !f32 {
    if (b == 0) {
        return error.DivisionByZero;
    }
    return a / b;
}

pub fn main() void {
    // Gọi một hàm đơn giản
    const sum = add(5, 3);
    std.debug.print("5 + 3 = {d}\\\\n", .{sum});

    // Gọi một hàm có thể trả về một lỗi
    if (divide(10, 2)) |result| {
        std.debug.print("10 / 2 = {d}\\\\n", .{result});
    } else |err| {
        std.debug.print("Lỗi: {}\\\\n", .{err});
    }

    // Một cách khác để xử lý lỗi
    const division_result = divide(10, 0) catch |err| {
        std.debug.print("Chia đã thất bại: {}\\\\n", .{err});
        0; // Giá trị mặc định trong trường hợp có lỗi
    };
    std.debug.print("Kết quả (hoặc mặc định): {d}\\\\n", .{division_result});
}

Kết Luận

Hướng dẫn này đã trình bày những điều thiết yếu để bắt đầu với Zig - cài đặt trên các hệ điều hành khác nhau, tạo và chạy chương trình đầu tiên của bạn, và làm việc với khung thử nghiệm của Zig. Chúng tôi cũng đã giới thiệu một số khái niệm cơ bản như biến, kiểu dữ liệu và hàm.

Zig là một ngôn ngữ mạnh mẽ cung cấp sự kiểm soát cấp thấp trong khi nhấn mạnh sự an toàn, rõ ràng và khả năng bảo trì. Cách tiếp cận của nó đối với xử lý lỗi và quản lý bộ nhớ khiến nó trở thành một lựa chọn thú vị thay thế cho các ngôn ngữ như C, C++ và Rust.

Để tiếp tục hành trình Zig của bạn, hãy cân nhắc:

  • Khám phá tài liệu chính thức của Zig
  • Tham gia cộng đồng Zig trên Discord hoặc diễn đàn Ziggit
  • Cài đặt Máy chủ Ngôn ngữ Zig để có tích hợp IDE tốt hơn
  • Thử xây dựng các dự án nhỏ để có kinh nghiệm thực hành

Hãy nhớ rằng Zig vẫn đang phát triển, vì vậy một số tính năng có thể thay đổi khi ngôn ngữ này trưởng thành đến phiên bản 1.0. Chúc bạn mã hóa vui vẻ!