Bazı bayrakların zorunlu olarak ayarlanmasının bir yolu var mı yoksa kendi varlıklarını kontrol etmem mi gerekiyor?Git'teki satır bayraklarını zorunlu kılmaya ayarlayabilir miyim?
cevap
flag
paketi zorunlu veya zorunlu bayrakları desteklemez (bayrak açıkça belirtilmelidir).
Yapabilecekleriniz, (tümü) bayraklar için mantıklı varsayılan değerler kullanmaktır. Ve eğer bir bayrak bir şey gibi hassas bir varsayılan değilse, uygulamanızın başlangıcındaki değeri kontrol edin ve bir hata mesajıyla durun. Yine de bayrak değerinin validasyonunu yapmalısınız (sadece gerekli bayraklar için değil), bu yüzden (büyük) genel bir yük anlamına gelmez ve bu genel olarak iyi bir uygulamadır.
CLI'da kullanmak üzere github.com/jessevdk/go-flags
paketini beğeniyorum. Bayrağın zorunlu olarak ayarlanması için required
özniteliği sağlanmıştır. Bunun gibi:
var opts struct {
...
// Example of a required flag
Name string `short:"n" long:"name" description:"A name" required:"true"`
...
}
already mentioned olarak flag
paket doğrudan bu özelliği sağlamaz ve genellikle (ve) mantıklı bir varsayılan sağlayamıyoruz olabilir. Sadece az sayıda bağımsız argümana (örneğin bir giriş ve çıkış dosya adı) ihtiyaç duyduğunuz durumlar için konumsal argümanlar kullanabilirsiniz (örneğin flag.Parse()
'dan sonra flag.NArg()==2
ve ardından input, output := flag.Arg(0), flag.Arg(1)
). Bununla birlikte, bunun mantıklı olmadığı bir durumunuz varsa; Herhangi bir tam sayı değerinin makul olduğu, ancak varsayılanın olmadığı herhangi bir sırayla kabul etmek istediğiniz birkaç tamsayı işaretini söyleyin. Sonra, önem verdiğiniz bayrakların açıkça ayarlanmış olup olmadığını kontrol etmek için flag.Visit
işlevini kullanabilirsiniz. Bu, bir bayrakın varsayılan değerine açıkça ayarlanmış olup olmadığını söylemenin tek yolu olduğunu düşünüyorum (durumu koruyan Set
özel bir flag.Value
türünü değil). belki bir şey gibi Örneğin
:
required := []string{"b", "s"}
flag.Parse()
seen := make(map[string]bool)
flag.Visit(func(f *flag.Flag) { seen[f.Name] = true })
for _, req := range required {
if !seen[req] {
// or possibly use `log.Fatalf` instead of:
fmt.Fprintf(os.Stderr, "missing required -%s argument/flag\n", req)
os.Exit(2) // the same exit code flag.Parse uses
}
}
ya "-b" veya bayrak açıkça ayarlanmadı "-s" Bu bir hata üretecektir.
go-flags
hem gerekli bayraklar ve gerekli konumsal argümanları beyan sağlar: Eğer bayrak yolunu varsa yolu bazı değer içerir * eğer
var opts struct {
Flag string `short:"f" required:"true" name:"a flag"`
Args struct {
First string `positional-arg-name:"first arg"`
Sencond string `positional-arg-name:"second arg"`
} `positional-args:"true" required:"2"`
}
args, err := flags.Parse(&opts)
, basitçe kontrol
var path = flag.String("f", "", "/path/to/access.log")
flag.Parse()
if *path == "" {
usage()
os.Exit(1)
}
- 1. Geçici özellikler getirmeyi ayarlayabilir miyim?
- 2. Android: layout_toLeftOf'u programlı olarak ayarlayabilir miyim?
- 3. Noktaların sırasını düzgün bir Poligonda ayarlayabilir miyim?
- 4. Kod değişikliklerini göstermek için Eclipse'i ayarlayabilir miyim?
- 5. Graphviz'de, dikdörtgenin sınırını gösteren oku ayarlayabilir miyim?
- 6. Firebug kesme noktalarını jsFiddle olarak ayarlayabilir miyim?
- 7. Şef düğümleri için fqdn ayarlayabilir miyim?
- 8. İşlenen nitelik değerini JavaScript’ten ayarlayabilir miyim?
- 9. Chrome'da "görüntüleme kaynağı" için tema ayarlayabilir miyim?
- 10. MinSdkVersionum X'den küçük olduğunda, manifoldumda API düzey X öznitelikleri ayarlayabilir miyim?
- 11. zorunlu döngü
- 12. Django datetime alanı için belirli bir varsayılan süre ayarlayabilir miyim?
- 13. Android için PIN kodunu Android'deki uygulamasından ayarlayabilir miyim
- 14. Bir Facebook uygulamasında Sayfa Sekmesi yüksekliğini ayarlayabilir miyim?
- 15. C# içinde UdpClient için zaman aşımı ayarlayabilir miyim?
- 16. Internet Explorer için farklı bir veri dizini ayarlayabilir miyim?
- 17. Kendo ızgarasında, sütun niteliklerini dinamik olarak bir işlevle ayarlayabilir miyim?
- 18. WPF: Ekli bir özelliği bir stilde tanımlayabilir/ayarlayabilir miyim?
- 19. npm'yi bir .pac dosyası kullanacak şekilde ayarlayabilir miyim?
- 20. Kod bloğu için bir zaman sınırı ayarlayabilir miyim?
- 21. Çalışma zamanında "android: layout_below" öğesini programlı olarak ayarlayabilir miyim?
- 22. İyonik hizmeti varsayılan olarak bir tarayıcı açmayacak şekilde ayarlayabilir miyim?
- 23. C# preprocessor yönergesini merkezi bir dosyadan ayarlayabilir miyim?
- 24. Bir ashx dosyasında, döndürülen dosyanın dosya adını ayarlayabilir miyim?
- 25. WPF: Bir elemanın genişliğini yüzde cinsinden ayarlayabilir miyim?
- 26. AndroidPlot: Grafik alanımın boyutunu, XML alanımda değil, XML'de ayarlayabilir miyim
- 27. pyplot: Genel bir işaret boyutu parametresi ayarlayabilir miyim?
- 28. "pull - rebase" için git'de bir takma ad ayarlayabilir miyim?
- 29. Google api ile dosyalarda kilit ayarlayabilir miyim? Gdrive'a baktığımda
- 30. Bir InputStream'in read() işlevi için zaman aşımı ayarlayabilir miyim?