Variabel Lingkungan
Timpa konfigurasi dari lingkungan
Variabel Lingkungan adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Mengapa Variabel Lingkungan
Metodologi Twelve-Factor App merekomendasikan penyimpanan konfigurasi di lingkungan. Variabel lingkungan memungkinkan biner yang sama berperilaku berbeda di lingkungan pengembangan, praproduksi, dan produksi tanpa mengubah berkas.
Viper dapat menambahkan lapisan variabel lingkungan di atas konfigurasi berkas.
Urutan Prioritas
Viper menentukan sebuah kunci dengan memeriksa sumber berdasarkan urutan prioritas, dari yang tertinggi:
- Panggilan
Seteksplisit - Opsi
- Variabel lingkungan
- Berkas konfigurasi
- Nilai bawaan
Jadi, variabel lingkungan menimpa berkas, tetapi kalah dari Set eksplisit.
Mengaktifkan Dukungan Variabel Lingkungan
viper.AutomaticEnv() memberi tahu Viper untuk memeriksa variabel lingkungan pada setiap kunci yang Anda minta. Setelah itu, viper.GetString("port") akan memeriksa variabel lingkungan PORT.
viper.AutomaticEnv()
port := viper.GetString("port")Menambahkan Prefiks
Untuk menghindari benturan dengan variabel lingkungan yang tidak berkaitan, tetapkan prefiks:
viper.SetEnvPrefix("myapp")- Sekarang kunci
portdipetakan ke variabel lingkunganMYAPP_PORT
Viper mengubah kunci menjadi huruf besar dan menambahkan prefiks dengan garis bawah.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTMenangani Kunci Bertingkat
Variabel lingkungan tidak boleh berisi titik. Gunakan pengganti kunci untuk memetakan kunci bertitik ke garis bawah, sehingga server.port menjadi SERVER_PORT.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTMengikat Satu Variabel
Alih-alih menggunakan mode otomatis, Anda dapat mengikat satu kunci secara eksplisit dengan viper.BindEnv. Ini berguna ketika nama variabel lingkungan tidak mengikuti konvensi prefiks Anda.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))Paket os dalam Pustaka Standar
Di balik layar, proses ini membaca lingkungan proses yang disediakan oleh pustaka standar melalui os.Getenv dan os.LookupEnv.
os.Getenvmengembalikan teks kosong jika variabel tidak ditetapkanos.LookupEnvmengembalikan boolean kedua yang memberi tahu apakah variabel tersebut ada
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}Menetapkan Variabel Lingkungan di Go
Anda dapat menetapkan variabel lingkungan secara terprogram untuk pengujian atau nilai bawaan dengan os.Setenv. Inilah yang kami gunakan untuk menunjukkan perilaku penimpaan berikutnya.
os.Setenv("MYAPP_PORT", "9090")Kosong vs Tidak Ditetapkan
Perhatikan: variabel lingkungan yang ditetapkan ke teks kosong tetap dianggap ada. os.LookupEnv mengembalikan ("", true). Jika Anda hanya menggunakan os.Getenv, Anda tidak dapat membedakan nilai kosong dari nilai yang tidak ditetapkan, dan hal ini penting untuk flag yang menyerupai boolean.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true trueMenyatukannya (Konsep)
Alur awal yang umum: baca berkas untuk mendapatkan nilai bawaan, lalu panggil AutomaticEnv agar variabel lingkungan penerapan memiliki prioritas. Tim operasi dapat mengubah MYAPP_PORT tanpa menyentuh YAML.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))Dapat Dijalankan: Demonstrasi Penimpaan Variabel Lingkungan
Program dengan pustaka standar ini meniru prioritas Viper: nilai bawaan dari berkas yang ditimpa oleh lingkungan.
package main
import (
"fmt"
"os"
)
func get(key, fileDefault string) string {
if v, ok := os.LookupEnv(key); ok {
return v
}
return fileDefault
}
func main() {
os.Setenv("PORT", "9090")
fmt.Println("port:", get("PORT", "8080"))
fmt.Println("host:", get("HOST", "localhost"))
}Pemeriksaan Singkat
Uji pemahaman Anda tentang konfigurasi variabel lingkungan.
Ringkasan
Anda telah mempelajari cara menimpa konfigurasi dari lingkungan:
- Variabel lingkungan memiliki posisi tinggi dalam prioritas Viper, di atas berkas
AutomaticEnv+SetEnvPrefixmemetakan kunci kePREFIX_KEY- Gunakan
SetEnvKeyReplaceruntuk kunci bertingkat yang menggunakan titik - Pustaka standar mendukungnya melalui
os.Getenv/os.LookupEnv
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Variabel Lingkungan” gratis?
Ya — teks lengkap “Variabel Lingkungan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Variabel Lingkungan”?
Timpa konfigurasi dari lingkungan Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Variabel Lingkungan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membaca File Konfigurasi
- Variabel Lingkungan
- Nilai Default dan Pemantauan
- Binding ke Struct