Ở một post trước mình đã hướng dẫn các bạn bạn build cli hoặc giống như là kubeclt:
Ở lần này chúng ta sẽ nâng cấp hơn lên tầm cao mới.
Build 1 terminal UI bằng golang.
https://github.com/charmbracelet/huh
Nó là thư viện đơn giản và mạnh mẽ cho việc xây dựng form và prompts tương tác trong terminal.
Bạn có thể nhìn ảnh bên dưới để dễ tưởng tượng:

Bên dưới này là 1 ví dụ:
package main
import (
"log"
"strconv"
"strings"
"github.com/charmbracelet/huh"
)
func main() {
var name string
var ageStr string // Temporary string variable for input
var age int // Final integer variable
var gender string // Variable to store gender
// Create initial form for name and age
form := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("What is your name?").
Value(&name),
huh.NewInput().
Title("What is your age?").
Value(&ageStr), // Store the age as a string
),
)
// Run the form
if err := form.Run(); err != nil {
log.Fatal(err)
}
// Convert age from string to int
age, err := strconv.Atoi(ageStr)
if err != nil {
log.Fatalf("Invalid age input: %s", err)
}
// Check age and ask for gender if age > 7
if age > 7 {
for {
genderForm := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("Are you male or female? (Type 'male' or 'female')").
Value(&gender),
),
)
// Run the gender form
if err := genderForm.Run(); err != nil {
log.Fatal(err)
}
// Normalize input (case insensitive)
gender = strings.ToLower(strings.TrimSpace(gender))
// Validate input
if gender == "male" || gender == "female" {
break // Valid input, exit the loop
} else {
log.Println("Invalid input. Please enter 'male' or 'female'.")
}
}
log.Printf("Name: %s, Age: %d, Gender: %s", name, age, gender)
} else {
log.Printf("Name: %s, Age: %d", name, age)
}
}
Lúc này bạn có thể build ra run thử kết quả:

Mình thực hiện nhập nếu age > 8 nó hiện lên 1 form khác,

