Pembina untuk Memulakan Ahli Go Struct
Pembangun baharu Go sering menghadapi cabaran pemulaan dengan struct. Pertimbangkan perkara berikut:
import "sync" type SyncMap struct { lock *sync.RWMutex hm map[string]string }
Memajukan struct ini dengan sm := new(SyncMap) malangnya menghasilkan panik kerana penunjuk nil.
Mengatasi Penunjuk Nil dengan Fungsi Pembantu
Untuk mengelakkan panik, pendekatan alternatif adalah menggunakan fungsi untuk pemula:
func (m *SyncMap) Init() { m.hm = make(map[string]string) m.lock = new(sync.RWMutex) }
Selepas membuat instantiat struct, seseorang mesti memanggil Init secara manual. Ini memperkenalkan kod boilerplate.
Memperkenalkan Pembina untuk Memudahkan Permulaan
Penyelesaian yang lebih elegan ialah menggunakan fungsi pembina. Pertimbangkan contoh ini:
func NewSyncMap() *SyncMap { return &SyncMap{hm: make(map[string]string)} }
Fungsi ini memulakan ahli struct yang diperlukan dan mengembalikan penunjuk kepada struct yang dimulakan. Penggunaannya adalah mudah:
sm := NewSyncMap() sm.Put("Test", "Test")
Pembina Dipertingkat untuk Struktur Kompleks
Untuk struct dengan lebih ramai ahli, pembina boleh dilanjutkan untuk mengendalikan tugas permulaan tambahan, seperti memulakan goroutin atau mendaftar pemuktamad:
func NewSyncMap() *SyncMap { sm := SyncMap{ hm: make(map[string]string), foo: "Bar", } runtime.SetFinalizer(sm, (*SyncMap).stop) go sm.backend() return &sm }
Dengan memanfaatkan pembina, pembangun Go boleh memudahkan pemulaan struct, menghapuskan kod boilerplate dan meningkatkan kebolehselenggaraan dan kebolehbacaan pangkalan kod mereka.
Atas ialah kandungan terperinci Bagaimanakah Pembina Boleh Memudahkan Permulaan Go Struct dan Mengelakkan Panik Penunjuk Tiada?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!