jsrosetta

I/O

Đối số và cờ dòng lệnh

process.argv/util.parseArgs của Node.js so với os.Args/flag (Go), env::args (Rust), CommandLine (Swift) và tham số main (Java).

Phiên bản tối thiểu
Node.js ≥ 18.11Go ≥ 1.0Rust ≥ 1.85Swift ≥ 4.0Java ≥ 25
Đã chạy thử trên
Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1

Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.

Có hai cách nhận input từ dòng lệnh: đọc thẳng mảng đối số thô, hoặc parse thành cờ có tên (--foo=bar). Node.js và Go có sẵn cả hai cách trong standard library. Rust std chỉ có env::args() (đối số thô) — cờ có tên phải dùng crate clap. Swift và Java không có package parse cờ nào trong standard library/Foundation cả; ví dụ bên dưới tự parse --foo=/--qux bằng tay, còn dự án thật thường dùng gói swift-argument-parser (Swift, qua Swift Package Manager) hoặc picocli (Java) tương ứng.

Đối số dòng lệnh thô

const args = process.argv.slice(2)
 
console.log(args)
$ node cli_args.js foo bar qux
[ 'foo', 'bar', 'qux' ]
 
$ go run cli_args.go foo bar qux
[foo bar qux]
 
$ cargo run -- foo bar qux
["foo", "bar", "qux"]
 
$ swift cli_args.swift foo bar qux
["foo", "bar", "qux"]
 
$ java Main.java foo bar qux
[foo, bar, qux]

Cờ dòng lệnh có tên

import { parseArgs } from 'node:util'
 
const { values: { foo, qux } } = parseArgs({
  options: {
    foo: { type: 'string', default: 'default value' },
    qux: { type: 'boolean', default: false }
  }
})
 
console.log('foo:', foo)
console.log('qux:', qux)
$ node cli_flags.js --foo='bar' --qux
foo: bar
qux: true
 
$ go run cli_flags.go -foo='bar' -qux=true
foo: bar
qux: true
 
$ cargo run -- --foo=bar --qux
foo: bar
qux: true
 
$ swift cli_flags.swift --foo=bar --qux
foo: bar
qux: true
 
$ java Main.java --foo=bar --qux
foo: bar
qux: true

Khác biệt chính

Node.js Go Rust Swift Java
Đối số thô process.argv.slice(2) os.Args[1:] env::args() CommandLine.arguments tham số args của main
Parse cờ có tên util.parseArgs() package flag crate clap không có sẵn không có sẵn
Tiền tố cờ --foo -foo (một hay hai gạch đều được) --foo tuỳ code tự parse tuỳ code tự parse
Cờ boolean --qux (không nhận giá trị) -qux hoặc -qux=true (không phải -qux true) --qux (không nhận giá trị) tuỳ code tự parse tuỳ code tự parse

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#cli-args