Go’da Bayrak Paketi Nasıl Kullanılır

Go'da Nesne Yönelimli Programlamaya Giriş

bu bayrak Go’daki paket, bir UNIX davranışını bir biçimde değiştirmek için komut satırı argümanlarını kabul eden sistem benzeri program. Golang’da, bayrak Go standart kitaplığıyla birlikte gelen yerleşik bir pakettir. A bayrak bir programa argüman olarak iletilen biçimlendirilmiş bir dizedir, böylece geçirilen bayrağa göre, programın denetimi veya davranışı bazı artırılmış yardımcı programlara sahiptir. Bu Go programlama öğreticisi, bu özelliği bazı kod örnekleriyle tanıtır.

Okumak: Uzaktaki Geliştiriciler için En İyi Araçlar

Go’daki bayrak paketi nedir?

Windows veya UNIX/Linux sistemlerinde kullanılan hemen hemen tüm terminal komutlarının kendileriyle ilişkili bazı bayrakları vardır. Windows’ta bu bayraklara anahtarlar denir. ve. UNIX/Linux sistemlerinde basitçe bayrak olarak bilinirler. Ancak özü aynıdır – çalışma zamanında program davranışını kontrol etmek. Dan beri bayrak UNIX/Linux’ta çok yaygın bir terimdir, bu eğitimde yalnızca bu platforma odaklanacağız. UNIX/Linux’ta kullanılan komutların çoğunda zaten yerleşik olarak daha fazla yardımcı program bulunur. Komutu terminalde verdiğimiz için tipik olarak normal işlevlerine hizmet ederler. Amacımıza hizmet ediyorsa sorun yok. Ancak programdan daha fazlasını istiyorsak, birçok bayrağına bakabilir ve ekstra yeteneklerini bulabiliriz. Bu yetenekler, komut satırında komut yürütülürken bayrak biçiminde argümanlar iletilerek kullanılabilir. Örneğin, geliştiriciler yazarsa adam kedi Linux terminalinde aşağıdaki bilgileri alabilirler:

Bu, kullanım kılavuzunu açar. kedi komut ve ayrıca mevcut bayraklar (isteğe bağlı olabilir) ve ne yaptıkları hakkında tüm bilgileri aldığımız komut. Örneğin, programcılar şunları kullanabilir: kedi bir metin dosyasını aşağıdaki gibi açma komutu:

$ cat abc.txt

this is sample text. First line.
this is another sample text. Second line.

Şimdi şöyle bir bayrak kullanırsak -n veya – – sayı bu, tüm çıktıları aşağıdaki gibi numaralandıracaktır:

$ cat -n abc.txt

1 this is sample text. First line.
2 this is another sample text. Second line.

Her ne kadar temel faydası kedi komut dosyaları birleştirmek ve standart çıktıda yazdırmak içindir, içinde yerleşik olarak çeşitli bayraklar kullanılarak serbest bırakılabilen bazı yardımcı programlar vardır:

...
-b, --number-nonblank
              number non empty output lines, overrides -n

-n, --number
              number all output lines
...

Yukarıdaki bayraklar, kullanıcının davranışını kontrol eder. kedi Bu durumda program. Bu, herhangi bir UNIX/Linux komutu için tipiktir.

Şimdi, ya bir programcı böyle bir davranışı bir Go programı kullanarak uygulamak isterse? bu bayrak standart kitaplıkta sağlanan paket bunu yapmanıza yardımcı olur. Go programı aracılığıyla bayrakları işlemek için oldukça az sayıda üçüncü taraf paketi olduğunu unutmayın, ancak bu eğitimde yalnızca bayrak yerleşik kitaplık tarafından sağlanan paket.

Go’da bayrak Paketi için Kılıflar Kullanılsın mı?

Bayraklar, komut satırı argümanı olarak iletilen biçimlendirilmiş dizelerden başka bir şey olmasa da, bir programda bunlarla uğraşmak, özellikle bir argüman olarak birden çok bayrak sağlamayı desteklemek istediğimizde, aslında çok kolay veya basit değildir. Programcı, programın mantığına odaklanmanın yanı sıra, bayrak paket, ayrıca bayrak olarak verilen kalıbın mantığını komut satırına yazmalı ve buna göre uygun işlevselliği sağlamalıdır.

Bazen hem bayraklar hem de dosya adları komut satırından geçirilebilir. Her ikisi de aslında belirsiz olabilecek biçimlendirilmiş dizeler olduğundan, bunları tanımlamak ve ayrı ayrı kullanmak için mantık orada olmalıdır. Özetle, bayrak davranışını aşağıdaki gibi bir paketten herhangi bir dış yardım almadan bir programda uygulamak çok zaman alır. bayrak. Bu nedenle, bir UNIX sistem tipi yardımcı program geliştirmemiz gerekirse, bayrak paketi bir geliştiricinin işini çok daha kolaylaştırabilir. İlginç bir şekilde Go, UNIX geçmişine sahip kişiler tarafından yapılmıştır ve lezzetlerinin çoğunun şu veya bu şekilde iz bırakması şaşırtıcı değildir. Sebep ne olursa olsun, Go’da olması güzel bir yardımcı programdır.

Bayrak Paketi Yardımcı Programı için Kod Örneklerine Git

Nasıl kullanılacağını göstermek için çok basit bir örnek deneyelim. bayrak Go’daki paket:

package main

import (
	"flag"
	"fmt"
)


func main() {

	str1 := flag.String("u", "root", "username")
	str2 := flag.String("p", "", "password")
	flag.Parse()
	fmt.Println("Username : ", *str1)
	fmt.Println("Password : ", *str2)
}

Bu programın iki komut satırı seçeneğini tanıdığını gözlemleyin: -u için Kullanıcı adı ve -p için şifre. bu flag.String(“u”, “kök”, “kullanıcı adı”) deyimi bir dize komut satırı seçeneğini tanımlar; ilki denir sen olarak varsayılan değerle kök. Üçüncü parametre, programın kullanımı ile görüntülenen kullanım dizesidir. Bu nedenle, programı aşağıdaki gibi çalıştırdığınızda:

$ go run main.go

Sadece bayraklarda verilen varsayılan değerlerle çalışır. Komut satırı seçeneğini sağlarsak:

$ go run main.go -u user123 -p secret123

Komut satırına sağlanan değerler, ilgili değişkenlerde kabul edilir. Ayrıca, siparişi değiştirebileceğimizi veya aşağıdaki gibi yalnızca bir seçenek sunabileceğimizi unutmayın – yine de gayet iyi çalışıyor:

$ go run main.go -p secret123 -u user123
$ go run main.go -p secret123 
$ go run main.go -u user123

Şimdi, programcılar aşağıdakileri sağladığında ne olur? -h bayrak. adlı herhangi bir seçeneği uygulamadığımızı gözlemleyin. h, ama yine de çalışıyor; sadece programın kullanım bilgilerini ve bayrakları yazdırır:

$ go run main.go -h

Bu, pek çok şeyin aslında bilgisayar tarafından halledildiği anlamına gelir. bayrak arka planda paket. Bu kadar az sayıda kod satırıyla komut satırı işlevselliğini yazılımdan destek almadan yazmak neredeyse imkansızdır. bayrak paket. AC programcısı, AC programcısı tarafından sağlanan yardımı kesinlikle takdir edebilecektir. bayrak Go’da paket. Bu aslında ne bayrak paket Go içindir.

Okumak: Geliştiriciler için En İyi Üretkenlik Araçları

Go bayrağı Paketindeki Temel İşlevler

bu bayrak paket sağlar bayrak.Bool ile bir Boolean komut satırı seçeneği tanımlayan işlev isim, değerve kullanım aynen diziler bayrak.Dize işlev. Benzer şekilde, işlevler vardır tam sayı, İşaretsiz tam sayıve var bu, tür değerlerinin kullanıcı tanımlı uygulamasını tanımlar. bu bayrak paket, ilgili işlev bayrağıyla ilişkili girişi otomatik olarak karşılık gelen değere dönüştürür – örneğin flag.Int bir tam sayı değer. Ayrıca, bir tam sayı değer sağlanır, aksi takdirde çalışma zamanında bir hata mesajı işaretler.

Bu işlevin bir varyasyonu, son eki olan bir ada sahiptir. var. denilen işlevler vardır. BoolVar, StringVar, IntVar, vb. Bu işlevler, yalnızca son ekler olmadan, karşılıklarıyla aynı şekilde çalışır. Örneğin, arasındaki fark bayrak.Bool ve flag.BoolVar Şöyleki:

func Bool(name string, value bool, usage string) *bool

func BoolVar(p *bool, name string, value bool, usage string)

Her ikisi de bir tanımlar bool belirtilen bayrak isim, varsayılan değer, ve kullanım dizesi. Tek fark, bayrak.Bool işlevi, adresi olan bir değer döndürür. bool bayrağın değerini saklayan değişken. Öte yandan, flag.BoolVar fazladan bir argümanı kabul eder p bu bir işaret ediyor bool bayrağın değerini depoladığı değişken.

adında bir fonksiyon da vardır. flag.Arg ve flag.Argsaşağıda gösterilen:

func Arg(i int) string
func Args() []string

bu flag.Arg işlev döndürür ben komut satırı argümanı. Arg(0) bayraklar işlendikten sonra kalan ilk argümandır. İstenen öğe yoksa boş bir dize döndürür. bu flag.Args işlev, bayrak olmayan komut satırı bağımsız değişkenlerini döndürür.

Go’daki Bayrak Paketine İlişkin Daha Fazla Kod Örneği

Kullanımını göstermek için biraz gelişmiş Go kodu örneği: bayrak Golang’da paket. Programın fikri basittir: hızlı sıralama, kabarcık sıralama, vb. gibi bir dizi sıralama işlevine sahip olacaktır. Kullanıcı, sağlanan verilere uygulamak istediği sıralama (bir veya daha fazla) algoritma listesini sağlayacaktır. Veriler komut satırı aracılığıyla sağlanır ve tam sayı Sıralama listesinin gerçekleştirildiği değerleri yazın. Programın optimize edilmediğini ve bu kavramı göstermek için hızlı bir uygulama olduğunu unutmayın:

package main

import (
	"flag"
	"fmt"
	"math/rand"
	"strconv"
	"strings"
)


func BubbleSort(elements []int) []int {
	for i := 0; i < len(elements)-1; i++ {
		for j := 0; j < len(elements)-1; j++ { if elements[j] > elements[j+1] {
				elements[j+1], elements[j] = elements[j], elements[j+1]
			}
		}
	}
	return elements
}

func QuickSort(elements []int) []int {
	if len(elements) < 2 {
		return elements
	}
	l, r := 0, len(elements)-1
	pivot := rand.Int() % len(elements)
	elements[pivot], elements[r] = elements[r], elements[pivot]

	for i, _ := range elements {
		if elements[i] < elements[r] {
			elements[l], elements[i] = elements[i], elements[l]
			l++
		}
	}

	elements[l], elements[r] = elements[r], elements[l]

	QuickSort(elements[:l])
	QuickSort(elements[l+1:])

	return elements
}

func SelectionSort(elements []int) []int {
	size := len(elements)
	var mindex int
	for i := 0; i < size-1; i++ {
		mindex = i
		for j := i + 1; j < size; j++ {
			if elements[j] < elements[mindex] { mindex = j } } elements[i], elements[mindex] = elements[mindex], elements[i] } return elements } type SortTypeFlag struct { SortType []string } func (s *SortTypeFlag) GetAlgoNames() []string { return s.SortType } func (s *SortTypeFlag) String() string { return fmt.Sprint(s.SortType) } func (s *SortTypeFlag) Set(v string) error { if len(s.SortType) > 0 {
		return fmt.Errorf("cannot use names flag more than once")
	}
	names := strings.Split(v, ",")
	s.SortType = append(s.SortType, names...)
	return nil
}

func main() {

	var sorting SortTypeFlag
	flag.Var(&sorting, "sort", "Comma separated list of sorting algorithm and space separated int values, eg. -sort=quick,bubble 88 33 99 55")
	flag.Parse()

	intArr := make([]int, len(flag.Args()))
	for index, val := range flag.Args() {
		intArr[index], _ = strconv.Atoi(val)
	}

	for _, item := range sorting.GetAlgoNames() {

		switch item {
		case "quick":
			fmt.Println("Quick Sort:", QuickSort(intArr))
		case "select":
			fmt.Println("Selection Sort:", SelectionSort(intArr))
		default:
			fmt.Println("(default) Bubble Sort:", BubbleSort(intArr))
		}
	}

}


Programı şu şekilde çalıştırabilirsiniz:

$ go run main.go -sort=quick,bubble 67 34 98 10 76 12

Bunu yapmak aşağıdaki çıktıyı üretecektir:

Quick Sort: [10 12 34 67 76 98]
Selection Sort: [10 12 34 67 76 98]

Go’daki Bayrak Paketi Üzerine Son Düşünceler

bu bayrak paket, Go’da çok sık kullanılmasa da, özellikle UNIX/Linux sistem benzeri bir yardımcı program oluşturmak istediğimizde standart kitaplığın sağladığı önemli kolaylıklardan biridir. Paket, komut satırı programlamasında bayrak kullanımlarının mantığını uygulamada zaman kazandırır. Aslında, bayrak kullanan bir program geliştirmek, bu paket verimli kullanıldığında daha kolay olamaz.

Devamını oku Go ve Golang programlama eğitimleri.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.