Temel Kullanım Örnekleri
Bu sayfa Ziva ile TUI uygulamaları oluşturmanın pratik örneklerini içerir. Tüm örnekler çalıştırılmaya hazırdır ve kütüphanenin ana özelliklerini gösterir.Örnek 1: Basit Onay
Onay görevi ile temel örnek:Copy
Ask AI
package main
import (
"fmt"
"log"
"github.com/qzeleza/ziva"
)
func main() {
// Onay görevi oluştur
confirm := ziva.NewYesNoTask(
"Eylem Onayı",
"Tüm geçici dosyalar silinsin mi?",
)
// Kuyruk oluştur ve görev ekle
queue := ziva.NewQueue("Sistem Temizliği")
queue.AddTasks(confirm)
// Çalıştır
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Sonucu işle
if confirm.IsYes() {
fmt.Println("🗑️ Geçici dosyalar silindi")
} else {
fmt.Println("❌ İşlem iptal edildi")
}
}
Örnek 2: Listeden Seçim
Listeden tek seçenek seçme örneği:Copy
Ask AI
package main
import (
"fmt"
"log"
"github.com/qzeleza/ziva"
)
func main() {
// Açıklamalı seçenekler
environments := []string{
"dev||Geliştirme ortamı - yerel makine",
"staging||Test ortamı - QA için",
"production||Canlı ortam - kullanıcılar",
}
// Seçim görevi oluştur
envTask := ziva.NewSingleSelectTask(
"Dağıtım Ortamı Seçimi",
environments,
).WithDefaultItem("staging")
// Kuyruğu yapılandır ve çalıştır
queue := ziva.NewQueue("Uygulama Dağıtımı")
queue.WithAppName("DeployTool")
queue.AddTasks(envTask)
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Sonucu al
selected := envTask.GetSelected()
fmt.Printf("🚀 Dağıtım ortamı: %s\n", selected)
}
Örnek 3: Çoklu Seçim
Birden fazla bileşen seçme örneği:Copy
Ask AI
package main
import (
"fmt"
"log"
"strings"
"github.com/qzeleza/ziva"
)
func main() {
// Kurulacak bileşenler
components := []string{
"web||Web sunucusu",
"api||REST API",
"db||Veritabanı",
"cache||Önbellek",
"monitoring||İzleme",
"backup||Yedekleme",
}
// Çoklu seçim görevi oluştur
compTask := ziva.NewMultiSelectTask(
"Kurulacak bileşenleri seçin",
components,
).WithSelectAll("Tümünü kur").
WithDefaultItems([]string{"web", "api"})
queue := ziva.NewQueue("Sistem Kurulumu")
queue.AddTasks(compTask)
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Seçilen bileşenleri göster
selected := compTask.GetSelected()
if len(selected) > 0 {
fmt.Printf("📦 Kurulacaklar: %s\n",
strings.Join(selected, ", "))
} else {
fmt.Println("❌ Hiçbir bileşen seçilmedi")
}
}
Örnek 4: Doğrulama ile Giriş
Doğrulama ile kullanıcı verisi toplama örneği:Copy
Ask AI
package main
import (
"fmt"
"log"
"github.com/qzeleza/ziva"
)
func main() {
v := ziva.DefaultValidators
// Doğrulama ile giriş alanları oluştur
name := ziva.NewInputTask("İsim", "Adınızı girin:").
WithValidator(v.Required())
email := ziva.NewInputTask("Email", "Email adresinizi girin:").
WithInputType(ziva.InputTypeEmail).
WithValidator(v.Email())
website := ziva.NewInputTask("Site", "Website URL (opsiyonel):").
WithValidator(v.OptionalURL())
// Kuyruk oluştur
queue := ziva.NewQueue("Kullanıcı Kaydı")
queue.WithAppName("UserReg")
queue.AddTasks(name, email, website)
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Toplanan bilgileri göster
fmt.Println("\n✅ Kayıt tamamlandı:")
fmt.Printf("İsim: %s\n", name.GetValue())
fmt.Printf("Email: %s\n", email.GetValue())
if website.GetValue() != "" {
fmt.Printf("Website: %s\n", website.GetValue())
}
}
Örnek 5: Fonksiyonel Görev
Uzun süren işlem yürütme örneği:Copy
Ask AI
package main
import (
"log"
"math/rand"
"time"
"github.com/qzeleza/ziva"
)
func main() {
// Rapor verileri
var stats struct {
FilesProcessed int
Errors int
Duration time.Duration
}
// Fonksiyonel görev oluştur
processTask := ziva.NewFuncTask(
"Dosya İşleme",
func() error {
start := time.Now()
// Dosya işleme simülasyonu
for i := 0; i < 100; i++ {
time.Sleep(50 * time.Millisecond)
stats.FilesProcessed++
// Rastgele hatalar
if rand.Intn(20) == 0 {
stats.Errors++
}
}
stats.Duration = time.Since(start)
return nil
},
// Sonuç özeti fonksiyonu
ziva.WithSummaryFunction(func() []string {
return []string{
fmt.Sprintf("İşlenen dosya: %d", stats.FilesProcessed),
fmt.Sprintf("Hata: %d", stats.Errors),
fmt.Sprintf("Süre: %v", stats.Duration.Round(time.Millisecond)),
}
}),
)
queue := ziva.NewQueue("Toplu İşlem")
queue.AddTasks(processTask)
if err := queue.Run(); err != nil {
log.Fatal(err)
}
}
Örnek 6: Kapsamlı Uygulama
Web sunucusu yapılandırması için tam örnek:Copy
Ask AI
package main
import (
"fmt"
"log"
"strconv"
"time"
"github.com/qzeleza/ziva"
)
type ServerConfig struct {
Host string
Port int
SSL bool
CertPath string
Modules []string
}
func main() {
config := &ServerConfig{}
// Yapılandırma görevlerini oluştur
tasks := createConfigTasks(config)
// Kuyruğu yapılandır
queue := ziva.NewQueue("Web Sunucusu Yapılandırması")
queue.WithAppName("WebServerSetup").
WithTasksNumbered(true, "[%02d]").
WithTitleColor(ziva.BlueBright, true)
queue.AddTasks(tasks...)
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Son yapılandırmayı göster
printConfig(config)
}
func createConfigTasks(config *ServerConfig) []ziva.Task {
v := ziva.DefaultValidators
// 1. Host
hostTask := ziva.NewInputTask("Sunucu Host", "IP adresi veya domain:").
WithValidator(v.Required()).
WithTimeout(30*time.Second, "localhost")
// 2. Port
portTask := ziva.NewInputTask("Port", "Sunucu portu (1-65535):").
WithInputType(ziva.InputTypeNumber).
WithValidator(v.Port()).
WithTimeout(15*time.Second, "8080")
// 3. SSL
sslTask := ziva.NewYesNoTask("SSL", "HTTPS etkinleştirilsin mi?").
WithDefaultItem("Evet")
// 4. Modüller
modules := []string{
"auth||Kullanıcı kimlik doğrulama",
"cors||Cross-Origin Resource Sharing",
"compress||Yanıt sıkıştırma",
"static||Statik dosyalar",
"proxy||Ters proxy",
"cache||Önbellek",
}
moduleTask := ziva.NewMultiSelectTask("Modüller", modules).
WithSelectAll("Tüm modülleri etkinleştir").
WithDefaultItems([]string{"auth", "static"})
// 5. Yapılandırma uygulama fonksiyonel görevi
applyTask := ziva.NewFuncTask(
"Yapılandırma Uygulama",
func() error {
// Yapılandırmayı topla
config.Host = hostTask.GetValue()
if port, err := strconv.Atoi(portTask.GetValue()); err == nil {
config.Port = port
}
config.SSL = sslTask.IsYes()
config.Modules = moduleTask.GetSelected()
// Ayar uygulama simülasyonu
time.Sleep(2 * time.Second)
return nil
},
ziva.WithSummaryFunction(func() []string {
return []string{
"Yapılandırma uygulandı",
"Sunucu başlatılmaya hazır",
}
}),
)
return []ziva.Task{hostTask, portTask, sslTask, moduleTask, applyTask}
}
func printConfig(config *ServerConfig) {
fmt.Println("\n🔧 Sunucu Yapılandırması:")
fmt.Printf("Adres: %s:%d\n", config.Host, config.Port)
fmt.Printf("SSL: %v\n", config.SSL)
fmt.Printf("Modüller: %v\n", config.Modules)
// Bağlantı URL'si
protocol := "http"
if config.SSL {
protocol = "https"
}
fmt.Printf("\n🌐 URL: %s://%s:%d\n", protocol, config.Host, config.Port)
}
Kullanım İpuçları
1. Görev Gruplandırma
İlgili görevleri mantıksal olarak gruplandırın:Copy
Ask AI
// Kimlik doğrulama grubu
authTasks := []ziva.Task{
ziva.NewInputTask("Username", "Kullanıcı adı:"),
ziva.NewInputTask("Password", "Şifre:").WithInputType(ziva.InputTypePassword),
}
// Ayarlar grubu
configTasks := []ziva.Task{
ziva.NewSingleSelectTask("Theme", themes),
ziva.NewYesNoTask("Notifications", "Bildirimler etkinleştirilsin mi?"),
}
queue.AddTasks(authTasks...)
queue.AddTasks(configTasks...)
2. İptal İşleme
Copy
Ask AI
queue := ziva.NewQueue("Kurulum")
if err := queue.Run(); err != nil {
if err == context.Canceled {
fmt.Println("❌ Kurulum kullanıcı tarafından iptal edildi")
return
}
log.Fatal(err)
}
3. Yapılandırma Kaydetme
Copy
Ask AI
// Başarılı yürütmeden sonra
config := collectResults(tasks...)
if err := saveConfig(config); err != nil {
log.Printf("Kayıt hatası: %v", err)
}
Ayrıca Bakınız
- Gelişmiş Örnekler - karmaşık kullanım senaryoları
- Bileşenler - her bileşen hakkında detaylar
- Doğrulama - veri doğrulama sistemi