Pengenalan
Jika kalian familiar dengan command-line interface, kalian mungkin pernah melihat flag atau penanda seperti -h
, -v
, --name foo
, dan sebagainya. Beberapa flag menggunakan tipe data primitif seperti string
, int
, bool
, dan sejenisnya. Sisanya adalah flag khusus yang menggunakan pola spesifik atau struktur data seperti IP
, URL
, Array
, Map
, dan sebagainya. Golang menyediakan sebuah library bawaan flag
untuk membuat flag command-line khusus. Beberapa fungsi yang disediakan untuk membuat flag sudah cukup jelas, seperti flag.String
, flag.Int
, dsb. Tapi, bagaimana dengan custom flag? Di artikel ini, kalian akan mempelajari beberapa cara untuk membuat flag command-line custom pada Golang.
Contoh
Misalnya kalian mau membuat flag custom yang menerima sebuah list berisi string
. Penggunaan flag-nya akan seperti ini:
|
|
Di bawah ini adalah beberapa cara untuk mendefinisikan flag custom tersebut.
Flag Var
flag.Var
adalah cara mendefinisikan flag custom. flag.Var
menerima sebuah custom struct yang mengimplementasikan interface flag.Value
.
|
|
Hal penting yang perlu diperhatikan adalah metode Set
. Setiap flag kalian dipanggil, metode Set
akan dipanggil.
Flag Func
flag.Func
adalah cara yang mudah untuk mendefinisikan sebuah flag custom. flag.Func
menggunakan flag.Var
sebagai basisnya, jadi kalian tidak perlu membuat custom struct.
|
|
Seperti kalian lihat, parameter terakhir dari flag.Func
adalah metode Set
yang kalian implementasikan pada contoh sebelumnya.
Flag TextVar
flag.TextVar
adalah cara baru yang diperkenalkan pada go1.19
. flag.TextVar
menggunakan flag.Var
sebagai basisnya seperti flag.Func
, tapi menerima interface encoding.TextUnmarshaler
dan encoding.TextMarshaler
, dan bukan flag.Value
. Artinya, kalian dapat menggunakan struct bawaan seperti big.Int
, netip.Addr
, dan time.Time
sebagai flag tanpa harus mengimplementasikan custom struct.
|
|
Seperti yang kalian lihat, ini mirip dengan flag.Var
, tapi menggunakan MarshalText
dan UnmarshalText
, sebagai pengganti metode String
dan Set
.
Kesimpulan
Sekarang kalian tahu beberapa cara mendefinisikan command-line flag custom menggunakan Golang. Jika ingin mempelajari package flag
lebih lanjut, kalian bisa membaca dokumentasi resminya di sini.
Terima kasih sudah membaca!