Heim  >  Artikel  >  Backend-Entwicklung  >  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
PHPznach vorne
2024-02-10 14:54:09724Durchsuche

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

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

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
}

Dann können Sie Folgendes tun:

MyFunc(MyStruct.MyField.GetOtherField())

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen