Rumah > pembangunan bahagian belakang > Golang > Adakah terdapat cara untuk mengendalikan penunjuk nil di Golang tanpa menggunakan if/else?

Adakah terdapat cara untuk mengendalikan penunjuk nil di Golang tanpa menggunakan if/else?

PHPz
Lepaskan: 2024-02-10 14:54:09
ke hadapan
765 orang telah melayarinya

Adakah terdapat cara untuk mengendalikan penunjuk nil di Golang tanpa menggunakan if/else?

Editor PHP Yuzi, pernahkah anda menghadapi masalah menangani titik nol dalam pengaturcaraan Golang? Adakah anda tertanya-tanya sama ada terdapat cara untuk mengelak daripada menggunakan kenyataan if/else yang menyusahkan untuk menangani masalah ini? Jawapannya ya! Di Golang, kami boleh menggunakan beberapa teknik dan ciri untuk memudahkan pemprosesan penunjuk nil dan menjadikan kod lebih ringkas dan elegan. Seterusnya, saya akan memperkenalkan kaedah ini kepada anda secara terperinci untuk menjadikan anda lebih selesa dalam pengaturcaraan Golang.

Kandungan soalan

Sebagai contoh, saya mempunyai kod ini:

type MyStruct struct {    
    ...
    MyField *MyOtherStruct
    ...
}

type MyOtherStruct struct {
    ...
    MyOtherField *string
    ...
}

// I have a fuction that receive MyOtherField as parameter
func MyFunc(myOtherField *string) {
    ...
}

// How can I avoid using if/else here
if MyStruct.MyField != nil {
    MyFunc((*MyStruct.MyField).MyOtherField)
} else {
    MyFunc(nil)
}
Salin selepas log masuk

Dalam contoh saya, saya perlu menggunakan if else untuk mengendalikan sama ada mystruct.myfield adalah sifar. Saya ingin mencari cara untuk memendekkan kod saya.

Saya ingin mencari kaedah seperti myfunc(mystruct.myfield ? (*mystruct.myfield).myotherfield : nil) dalam javascript.

Penyelesaian

Tidak, anda tidak boleh melakukan perkara yang biasa anda lakukan dalam js. Ia hanya gula sintaksis. Walau bagaimanapun, terdapat beberapa alternatif.

Pertama, anda boleh menulis:

if mystruct.myfield != nil {
    myfunc(mystruct.myfield.myotherfield)
} else {
    myfunc(nil)
}
Salin selepas log masuk

Dalam sesetengah kes mungkin masuk akal untuk menulis pengambil untuk digunakan dengan penerima penunjuk:

func (m *myotherstruct) getotherfield() *otherfieldtype {
   if m==nil {
      return nil
   }
   return m.otherfield
}
Salin selepas log masuk

Kemudian anda boleh melakukan ini:

MyFunc(MyStruct.MyField.GetOtherField())
Salin selepas log masuk

Beginilah cara grpc menjana model go. Tetapi ini biasanya tidak digalakkan. Ia menyembunyikan ralat halus. Lebih baik anda jelas dan semak di mana anda menggunakannya.

Atas ialah kandungan terperinci Adakah terdapat cara untuk mengendalikan penunjuk nil di Golang tanpa menggunakan if/else?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan