【实战进阶】用Zig高效引入外部库,打造专属命令行神器!

经过几周的密集练习,我们开始对 Zig 有了感觉了吧。我反正已经开始能熟练的安装 Zig 并搭建项目了。本篇将把这些核心的技能加以混合使用,拿编写命令行程序为目的,把整个流程给大家跑一遍,手把手教导一遍,和大家一起梳理。

注意:Zig 目前还没有到 V1.0 版本,也就是还无法稳定,所以你不要指望拿它去写成熟应用。我们主要目的就是玩,好处是这个编程语言是社区驱动的,迭代快,语法比 C 要高级点,本身也能替代 C,为以后写高级程序做好储备。后面出错,也不要抱怨,直接社区沟通,让我们一起交流。

首先,我们要找到处理命令行程序参数和打印字符串的框架,这里,有技巧。我是通过搜索 zig-awesome 这类关键字项目去找的,前人栽树,肯定好乘凉:

GitHub - jiacai2050/zigcli: A toolkit for building command lines programs in Zig.A toolkit for building command lines programs in Zig. - jiacai2050/zigcliicon-default.png?t=N7T8https://github.com/jiacai2050/zigcli/tree/main

工程介绍如下:

Modules

Zig modules to help developers build their awesome cli programs. Currently there are:

  • simargs, which is used to parse arguments
  • pretty-table, which is used to print aligned and formatted tables

这个类库有了,我们怎么用呢。按下面操作一起练习一遍:

1、创建项目:

❯ mkdir zig-simargs; cd zig-simargs;
❯ zig init
❯ ls
build.zig  build.zig.zon  src  zig-cache  zig-out

 2、按zigcli 的介绍,加入类库:

zig fetch --save=zigcli https://github.com/jiacai2050/zigcli/archive/${COMMIT}.tar.gz

这里 COMMIT就找最新的 commitid 贴进去就可以。当你执行完之后,打开 buildl.zig.zon,就会看到如下新增内容:

    .dependencies = .{
        .zigcli = .{
            .url = "https://github.com/jiacai2050/zigcli/archive/54d095c0a53669b2f2ff4e173e8c22f47d496eda.tar.gz",
            .hash = "1220e8fb37224ab6ee9c575129594a808643b548596d63dd8b87cb42e22a7eed9f51",
        },
    },

确认完自动加入的内容,需要自己手工在 build.zig 手工加入类库声明:

    const zigcli = b.dependency("zigcli", .{});

    // Currently zigcli provide two modules.
    exe.root_module.addImport("simargs", zigcli.module("simargs"));
    exe.root_module.addImport("pretty-table", zigcli.module("pretty-table"));

3.通过 build.zig 了解到主 main 文件是 src/main.zig,打开加入样例代码如下:

const std = @import("std");

const Table = @import("pretty-table").Table;
const Separator = @import("pretty-table").Separator;
const String = @import("pretty-table").String;

pub fn main() !void {
    const t = Table(2){
        .header = [_]String{ "Language", "Files" },
        .rows = &[_][2]String{
            .{ "Zig", "3" },
            .{ "Python", "2" },
            .{ "C", "12" },
            .{ "Ruby", "5" },
        },
        .footer = [2]String{ "Total", "22" },
        .mode = .box,
    };

    const out = std.io.getStdOut();
    try out.writer().print("{}", .{t});
}

然后在目录下跑命令:zig build run 返回

❯ zig build run
┌────────┬─────┐
│Language│Files│
├────────┼─────┤
│Zig     │3    │
│Python  │2    │
│C       │12   │
│Ruby    │5    │
├────────┼─────┤
│Total   │22   │
└────────┴─────┘

一个完整的命令行程序就编写完成。是不是很轻松。代码量不多,自己多联系几遍,掌握 Zig 编程的乐趣吧。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaodeshi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值