Selamat datang ke dunia DevOps! ? Hari ini, saya kembali dengan satu lagi blog yang menarik untuk membantu anda menyelam lebih mendalam ke dalam pengaturcaraan praktikal untuk tugas DevOps. Dalam blog saya sebelum ini, kami meneroka 3 projek Python yang meletakkan asas untuk automasi DevOps.
Sekarang, mari tukar gear dan terokai kuasa Go-lang! Blog ini akan membimbing anda membina 3 projek Go-lang yang praktikal dan mesra pemula:
Jadi, ambil editor kod kegemaran anda, dan mari mulakan! ?
Sebelum kita menyelami pembinaan projek ini, mari pastikan persekitaran anda disediakan dan sedia untuk digunakan. Inilah yang anda perlukan:
1. Pergi (Golang)
Anda perlu memasang Go pada sistem anda. Ikuti langkah ini berdasarkan sistem pengendalian anda:
Tingkap
go version
Ubuntu
sudo apt update sudo apt install -y golang
go version
macOS
brew install go
go version
2. Pemahaman Asas Go
Walaupun anda tidak perlu menjadi pakar, mempunyai pemahaman asas tentang konsep Go seperti pembolehubah, fungsi dan struktur akan membantu anda mengikutinya dengan lancar. Jika anda baru menggunakan Go, saya syorkan anda menerokai Go Tour untuk pengenalan pantas.
Dengan memenuhi prasyarat ini, anda sudah bersedia untuk mula membina projek Go-lang yang hebat ini! ?
Mari kita mulakan perjalanan kita dengan projek pertama — alat pemantauan penggunaan cakera. Program ini akan membantu anda menganalisis penggunaan cakera untuk mana-mana direktori tertentu pada sistem anda.
Anda boleh mencari kod sumber dalam repositori GitHub saya. Mari mulakan dengan mencipta fail bernama disk_usage.go dan menambah kod berikut:
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
Cara Program Berfungsi:
Menjalankan Program
Untuk menjalankan program, gunakan arahan berikut:
go version
sudo apt update sudo apt install -y golang
Memandangkan saya mempunyai satu partition, saya akan mendapat hasil yang sama jika saya menyediakan laluan yang berbeza.
Projek ini menunjukkan cara Go boleh berinteraksi dengan API asas sistem anda, menjadikannya titik permulaan yang bagus untuk tugas pemantauan sistem. ?
Projek kedua melibatkan penciptaan pelayan HTTP dalam Go yang mengehoskan tapak web portfolio. Projek ini menunjukkan cara anda boleh membina dan menyediakan tapak web statik sambil menggabungkan titik akhir pemeriksaan kesihatan untuk pemantauan.
Anda boleh mencari kod sumber dalam repositori GitHub saya.
Langkah untuk Membina Pelayan HTTP
go version
Cara Ia Berfungsi
Membuat Laman Web Portfolio
Struktur: Di dalam folder statik, cipta:
Tambah kandungan berikut pada fail anda:
index.html:
brew install go
Menjalankan Program
go version
Mengakses Pemeriksaan Kesihatan
Untuk menyemak kesihatan pelayan, lawati:
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
Projek ini mempamerkan cara menggunakan Go-lang untuk mencipta pelayan web berfungsi untuk mengehos kandungan statik, dengan pemantauan tambahan melalui titik akhir pemeriksaan kesihatan. ?
Dalam projek akhir blog ini, kami akan mencipta API RESTful yang membolehkan anda mengurus senarai alatan DevOps. Program ini menunjukkan penggunaan pakej net/http Go untuk mengendalikan laluan RESTful dan mengurus data.
Kod sumber lengkap tersedia pada repositori GitHub saya.
Membina API RESTful
Langkah 1: Program Utama
Buat fail bernama main.go dan tambah kod berikut:
go version
Langkah 2: Pengendalian Data
Dalam direktori alat, buat fail bernama data.go dan tambah:
sudo apt update sudo apt install -y golang
Langkah 3: Pengendali
Dalam direktori alat, buat fail lain bernama handler.go dan tambah:
go version
Memulakan Modul
Sebelum menjalankan program, mulakan modul Go:
brew install go
Ini memastikan projek boleh menggunakan pakej projek/alat.
Menjalankan Program
Mulakan pelayan dengan menjalankan:
go version
Menguji API
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
Output:
go run disk_usage.go /path/to/directory
go run disk_usage.go
Output:
package main import ( "fmt" "net/http" ) func healthCheckHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) } func main() { fs := http.FileServer(http.Dir("./static")) http.Handle("/", fs) http.HandleFunc("/health", healthCheckHandler) port := "8090" fmt.Printf("Starting server on port %s....", port) err := http.ListenAndServe(":"+port, nil) if err != nil { fmt.Println("Error starting server:", err) } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pravesh Sudha - Portfolio</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <div> <p><strong>style.css:</strong><br> </p> <pre class="brush:php;toolbar:false">body { font-family: Arial, sans-serif; margin: 0; padding: 0; line-height: 1.6; color: #333; background-color: #f9f9f9; } header { background: #4caf50; color: #fff; padding: 20px 0; text-align: center; } header .profile-picture { width: 150px; height: 150px; border-radius: 50%; margin-bottom: 15px; } header h1 { font-size: 2.5em; margin: 0; } header .subtitle { font-size: 1.2em; margin: 0; } main { padding: 20px; max-width: 800px; margin: 20px auto; background: #fff; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } main .about, main .links { margin-bottom: 20px; } main .links ul { list-style: none; padding: 0; } main .links li { margin: 10px 0; } main .links a { color: #4caf50; text-decoration: none; font-weight: bold; } main .links a:hover { text-decoration: underline; } footer { text-align: center; padding: 10px 0; background: #333; color: #fff; }
Output:
go run http_server.go
Dalam blog ini, kami telah meneroka tiga projek praktikal Go yang membantu anda mendapatkan pengalaman langsung dengan pelbagai aspek pembangunan perisian. Daripada memantau penggunaan cakera kepada membina pelayan HTTP ringkas kepada mengehos tapak web portfolio, dan akhirnya, mencipta API RESTful untuk mengurus alatan DevOps, projek ini menyediakan asas yang kukuh untuk sesiapa sahaja yang ingin mempertajam kemahiran pengaturcaraan Go mereka.
Setiap projek ini adalah blok binaan yang boleh dikembangkan untuk disesuaikan dengan aplikasi dunia sebenar. Sama ada anda berminat untuk memantau sistem, membangunkan aplikasi web atau membina API, Go menyediakan kesederhanaan dan kuasa yang diperlukan untuk pembangunan yang cekap.
? Untuk blog yang lebih bermaklumat, Ikuti saya di Hashnode, X(Twitter) dan LinkedIn.
Sehingga itu, Selamat Mengekod!!
Selamat Belajar! ?
Atas ialah kandungan terperinci xciting Projek Go-lang untuk Memulakan Perjalanan DevOps Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!