Ada beberapa jawaban / teknik untuk pertanyaan di bawah ini:
- Bagaimana cara mengatur nilai default ke struct golang?
- Cara menginisialisasi struct di golang
Saya punya beberapa jawaban tetapi diskusi lebih lanjut diperlukan.
go
struct
initialization
default-value
Prateek
sumber
sumber
Jawaban:
Satu ide yang mungkin adalah menulis fungsi konstruktor yang terpisah
sumber
NewSomething
dan bahkan bidangText
danDefaultText
, tapi jangan ekspor jenis structsomething
.reflect.New()
, misalnya), itu tidak bisa diharapkan untuk mengetahui tentang fungsi pabrik Anda yang bernama khusus. Dalam hal itu, dan pendeknya bahasa itu sendiri sedang diubah, hanya antarmuka (yang perpustakaan dapat memeriksa) akan melakukan, saya pikir.Paksa metode untuk mendapatkan struct (cara konstruktor).
Ini dapat dilakukan dengan hanya membuat tipe itu sendiri tidak diekspor. Anda dapat mengekspor fungsi NewSomething dan bahkan bidang Teks dan DefaultText, tetapi jangan ekspor sesuatu jenis struct
Cara lain untuk menyesuaikannya untuk modul Anda sendiri adalah dengan menggunakan struct Config untuk menetapkan nilai default (Opsi 5 di tautan) Namun bukan cara yang baik.
sumber
Satu masalah dengan opsi 1 dalam jawaban dari Victor Zamanian adalah bahwa jika tipe tidak diekspor maka pengguna paket Anda tidak dapat mendeklarasikannya sebagai tipe untuk parameter fungsi dll. Salah satu cara untuk mengatasi ini adalah dengan mengekspor antarmuka bukan misalnya struct
Yang memungkinkan kita mendeklarasikan tipe parameter fungsi menggunakan antarmuka Kandidat yang diekspor. Satu-satunya kelemahan saya dapat melihat dari solusi ini adalah bahwa semua metode kami perlu dideklarasikan dalam definisi antarmuka, tetapi Anda bisa berpendapat bahwa itu adalah praktik yang baik.
sumber
Votes unit32
mungkin seharusnyaVotes uint32
Ada cara untuk melakukan ini dengan tag, yang memungkinkan untuk beberapa default.
Asumsikan Anda memiliki struct berikut, dengan 2 tag default default0 dan default1 .
Sekarang mungkin untuk Mengatur default.
Inilah program lengkapnya di taman bermain .
Jika Anda tertarik pada contoh yang lebih kompleks, katakan dengan irisan dan peta, lalu, lihat creasty / defaultse
sumber
Dari https://golang.org/doc/effective_go.html#composite_literals :
Terkadang nilai nol tidak cukup baik dan konstruktor inisialisasi diperlukan, seperti dalam contoh ini berasal dari paket os.
sumber
sumber