Menetapkan True to Bool Pointer dalam Go Struct Literals
Go programmer sering menghadapi situasi di mana mereka perlu menetapkan bool pointer kepada true dalam struct literal . Artikel ini menyelidiki pilihan yang tersedia untuk mencapai matlamat ini tanpa menentukan pengecam baharu.
Coretan kod yang disediakan mempamerkan fungsi yang mengambil penunjuk bool, menimbulkan persoalan sama ada binaan wujud yang membenarkan medan is menjadi ditetapkan kepada benar dalam literal struct itu sendiri.
Pendekatan untuk Tetapan Benar:
1. Pengindeksan Tatasusunan (Tidak Optimum):
h := handler{is: &[]bool{true}[0]}
Kaedah ini melibatkan mencipta tatasusunan dengan set bool tunggal kepada benar, mengindeksnya dan memberikan alamat elemen yang diindeks. Walaupun ia tidak memerlukan pembolehubah tambahan, plat dandang dan penggunaan memori adalah kelemahan.
2. Fungsi Pembantu dengan Pulangan Penunjuk:
func newTrue() *bool { b := true return &b }
Pendekatan ini memperkenalkan fungsi pembantu yang mengembalikan alamat pembolehubah bool sebenar. Ia digunakan seperti berikut:
h := handler{is: newTrue()}
Ini menyediakan penyelesaian yang lebih bersih dan boleh disesuaikan.
3. Fungsi Tanpa Nama dengan Penutupan:
h := handler{is: func() *bool { b := true; return &b }()}
Teknik fungsi tanpa nama menggunakan penutupan untuk menyediakan kefungsian yang diingini.
4. Pilihan Fungsian dengan Penutupan:
h := handler{is: func(b bool) *bool { return &b }(true)}
Pilihan ini menawarkan pendekatan pengaturcaraan berfungsi, dengan nilai bool dihantar sebagai hujah.
Penyelesaian Optimum:
Penyelesaian paling optimum untuk kebanyakan senario ialah menggunakan fungsi pembantu seperti newTrue(), kerana ia menyediakan cara ringkas dan boleh diguna semula untuk menetapkan penunjuk bool kepada benar dalam literal struct.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan `true` kepada Penunjuk `bool` dalam Go Struct Literal Tanpa Menentukan Pembolehubah Tambahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!