Go CLI Uygulamalarında Flag Parsing: Cobra Kütüphanesi Başlangıç

Go'da komut satırı uygulaması yazarken, kullanıcıdan aldığın parametreleri (flag) düzgün şekilde işlemek önemlidir. Cobra kütüphanesi bunu kolaylaştırır. Başlangıçta bayağı karmaşık görünebilir ama adım adım ilerlemek yeterli.

Cobra nedir? Kısaca, Go'da profesyonel CLI uygulamalar yazmak için tasarlanmış bir framework'tür. Flag parsing, alt komutlar (subcommand), otomatik yardım metni ve hatta bash tamamlama gibi özellikler sunuyor.

Kurulum

Önce Cobra'yı projen içine ekle:

1go get -u github.com/spf13/cobra/v2

İlk Uygulama

Basit bir örnek yapacağız. Bir kişiye selamlama yapan bir program:

1package main
2
3import (
4"fmt"
5"github.com/spf13/cobra"
6)
7
8var name string
9
10var rootCmd = &cobra.Command{
11Use: "greeter",
12Short: "Bir kişiye selamla",
13Run: func(cmd *cobra.Command, args []string) {
14if name == "" {
15fmt.Println("Merhaba Dünya!")
16} else {
17fmt.Printf("Merhaba %s!\n", name)
18}
19},
20}
21
22func init() {
23rootCmd.Flags().StringVarP(&name, "name", "n", "", "Selamlanacak kişinin adı")
24}
25
26func main() {
27rootCmd.Execute()
28}

Bu kodu derle ve çalıştır:

1go run main.go

Çıktı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1Merhaba Dünya!

Flag ile çalıştır:

1go run main.go --name Ahmet

Çıktı:

1Merhaba Ahmet!

Kısa form da çalışır:

1go run main.go -n Ayşe

Çıktı:

1Merhaba Ayşe!

Nasıl Çalışıyor?

Cobra'da her komut bir cobra.Command yapısıdır. Use komutun adı, Short kısa açıklama, Run ise çalıştırılacak fonksiyondur. init() içinde Flags() ile flag tanımlarsın. StringVarP() string türü bir flag ekler; parametreler sırasıyla değişken adresi, uzun adı, kısa adı ve varsayılan değeridir.

Yardım metni otomatik:

1go run main.go --help

Cobra bunu kendi hazırlar. Alt komutlar eklemek, daha karmaşık uygulamalar yapmak da mümkün. Ama başlangıç için bu temel yapı yeterli. Flag parsing artık sistem tarafından yönetilir, sen sadece iş mantığına odaklanırsın.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz