Mengapa Tidak Disarankan Menulis godotenv.Load() != nil di Go?

Dalam bahasa Go, pengecekan error adalah hal yang sangat penting. Banyak pemula yang bertanya apakah cara cepat seperti ini valid:

if godotenv.Load() != nil {
    // ...
}

Jawabannya: secara teknis bisa jalan, tetapi tidak disarankan, dan dianggap anti-pattern dalam komunitas Go. Artikel ini akan menjelaskan alasannya dengan bahasa sederhana.

 

Secara Logika Bisa, Tapi Tidak Berguna

Jika kamu menulis:

if godotenv.Load() != nil {
    // ...
}

Go menjalankan fungsi godotenv.Load(), mengambil nilai error-nya, lalu mengecek apakah hasilnya nil atau bukan.

Tetapi saat kamu menulis seperti ini:

  • Kamu tidak bisa mendapatkan isi error-nya

  • Kamu tidak bisa log detail error

  • Kamu tidak bisa mengembalikan error

  • Kamu tidak bisa men-debug masalahnya

Karena kamu tidak menyimpan error tersebut ke variabel apa pun.

 

Kamu Kehilangan Variabel err

Standar Go menuliskan error seperti ini:

if err := godotenv.Load(); err != nil {
    log.Println("⚠️ .env file tidak ditemukan:", err)
}

Atau:

err := godotenv.Load()
if err != nil {
    log.Println("⚠️ .env file tidak ditemukan:", err)
}

Dengan begitu:

  • Kamu punya variabel err

  • Kamu bisa melihat pesan error yang jelas

  • Kamu bisa return error ke pemanggil fungsi

  • Kamu bisa debug dengan lebih mudah

     

Risiko Memanggil Fungsi Dua Kali

Jika kamu menulis:

if godotenv.Load() != nil {
    // error
}
fmt.Println(godotenv.Load())

Fungsi Load() akan terpanggil dua kali, dan ini adalah kebiasaan buruk karena dapat menimbulkan efek samping, apalagi jika fungsi tersebut melakukan:

  • pembacaan file

  • koneksi ke jaringan

  • load konfigurasi

  • alokasi resource

Go sangat menghindari pemanggilan fungsi berulang tanpa alasan.

 

Konvensi Go: Selalu Simpan Error dalam Variabel err

err sebenarnya bukan variabel khusus dari sistem, melainkan hanya nama variabel biasa. Tetapi karena seluruh ekosistem Go menggunakannya, err menjadi:

  • standar penamaan error

  • mudah dipahami

  • konsisten di seluruh project

  • membuat kode lebih rapi dan idiomatik

Contoh versi idiomatik:

if err := godotenv.Load(); err != nil {
    log.Println("⚠️ .env tidak ditemukan:", err)
}

Ini adalah cara yang paling bersih dan paling disukai oleh komunitas Go.

 

Kesimpulan

godotenv.Load() != nil

  • Bisa dijalankan, tetapi tidak bermanfaat

  • Tidak bisa menangkap error untuk debugging

  • Berpotensi memanggil fungsi dua kali

  • Anti-pattern dalam Go

     

 Gunakan pola standar Go:

if err := godotenv.Load(); err != nil {
    // tangani error
}

Atau:

err := godotenv.Load()
if err != nil {
    // tangani error
}

Ini lebih aman, lebih jelas, dan mengikuti gaya penulisan Go yang benar.


0 Comments:

Posting Komentar