Heim > Backend-Entwicklung > Golang > Gibt es eine Möglichkeit, Nullzeiger in Golang zu verarbeiten, ohne if/else zu verwenden?

Gibt es eine Möglichkeit, Nullzeiger in Golang zu verarbeiten, ohne if/else zu verwenden?

PHPz
Freigeben: 2024-02-10 14:54:09
nach vorne
765 Leute haben es durchsucht

Gibt es eine Möglichkeit, Nullzeiger in Golang zu verarbeiten, ohne if/else zu verwenden?

PHP-Editor Yuzi, sind Sie schon einmal auf das Problem gestoßen, bei der Golang-Programmierung mit Nullzeigern umzugehen? Fragen Sie sich, ob es eine Möglichkeit gibt, die Verwendung umständlicher if/else-Anweisungen zur Lösung dieses Problems zu vermeiden? Die Antwort ist ja! In Golang können wir einige Techniken und Funktionen verwenden, um die Verarbeitung von Nullzeigern zu vereinfachen und den Code prägnanter und eleganter zu gestalten. Als nächstes werde ich Ihnen diese Methoden im Detail vorstellen, um Ihnen die Golang-Programmierung näher zu bringen.

Frageninhalt

Zum Beispiel habe ich diesen Code:

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)
}
Nach dem Login kopieren

In meinem Beispiel muss ich if else verwenden, um zu handhaben, ob mystruct.myfield Null ist. Ich möchte einen Weg finden, meinen Code zu kürzen.

Ich möchte eine Methode wie myfunc(mystruct.myfield ? (*mystruct.myfield).myotherfield : nil) in Javascript finden.

Workaround

Nein, Sie können in js nicht mehr das tun, was Sie früher getan haben. Es ist nur syntaktischer Zucker. Es gibt jedoch einige Alternativen.

Zuerst können Sie einfach schreiben:

if mystruct.myfield != nil {
    myfunc(mystruct.myfield.myotherfield)
} else {
    myfunc(nil)
}
Nach dem Login kopieren

In manchen Fällen kann es sinnvoll sein, einen Getter zur Verwendung mit einem Zeigerempfänger zu schreiben:

func (m *myotherstruct) getotherfield() *otherfieldtype {
   if m==nil {
      return nil
   }
   return m.otherfield
}
Nach dem Login kopieren

Dann können Sie Folgendes tun:

MyFunc(MyStruct.MyField.GetOtherField())
Nach dem Login kopieren

So generiert grpc Go-Modelle. Dies ist jedoch in der Regel nicht ratsam. Es verbirgt subtile Fehler. Es ist besser, klar zu sein und zu überprüfen, wo Sie es verwenden.

Das obige ist der detaillierte Inhalt vonGibt es eine Möglichkeit, Nullzeiger in Golang zu verarbeiten, ohne if/else zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage