ZigはGoに似たような値ベースの例外処理を採用している。 Goと違うのは、ZigのエラーはEnumになっているという事。

try

Rustでいう?。エラーをunwrapして値を返す。エラーになったらエラーを返す。以下の糖衣構文。

pub fn main() !void {
  const result = error_func() catch |err| return err;
}

if

Goのif err != nil ~とかに近いもの。エラーになった場合の動作を指定できる。

pub fn main() !void {
  const std = @import("std");
  
  // この時点ではエラーか値か分からない
  const result = error_func();
 
  if (result) |val| {
    std.debug.print("Success!", .{});
  } else |err| {
    // エラーの場合
	std.log.panic("Error: {s}", .{err});
  }
}