Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
PHPzke hadapan
2024-02-10 14:54:09724semak imbas

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)
}

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)
}

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
}

Kemudian anda boleh melakukan ini:

MyFunc(MyStruct.MyField.GetOtherField())

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam