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
Release: 2024-02-10 14:54:09
forward
765 people have browsed it

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)
}
Copy after login

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)
}
Copy after login

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
}
Copy after login

Then you can do this:

MyFunc(MyStruct.MyField.GetOtherField())
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template