Home >Backend Development >Golang >Is there a way to handle nil pointers in Golang without using if/else?

Is there a way to handle nil pointers in Golang without using if/else?

PHPz
PHPzforward
2024-02-10 14:54:09812browse

Is there a way to handle nil pointers in Golang without using if/else?

php editor Yuzi, have you ever encountered the trouble of dealing with nil pointers in Golang programming? Are you wondering if there is a way to avoid using cumbersome if/else statements to handle this problem? The answer is yes! In Golang, we can use some techniques and features to simplify the processing of nil pointers and make the code more concise and elegant. Next, I will introduce these methods to you in detail to make you more comfortable in Golang programming.

Question content

For example, I have this 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 my example I have to use if else to handle whether mystruct.myfield is zero. I want to find a way to shorten my code.

I want to find a method similar to myfunc(mystruct.myfield ? (*mystruct.myfield).myotherfield : nil) in javascript.

Solution

No, you can't do what you used to do in js. It's just syntactic sugar. However, there are some alternatives.

First, you can simply write:

if mystruct.myfield != nil {
    myfunc(mystruct.myfield.myotherfield)
} else {
    myfunc(nil)
}

In some cases it may make sense to write a getter for use with a pointer receiver:

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

Then you can do this:

MyFunc(MyStruct.MyField.GetOtherField())

This is how grpc generates go models. But this is usually not advisable. It hides subtle errors. It's better to be clear and check where you are using it.

The above is the detailed content of Is there a way to handle nil pointers in Golang without using if/else?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete