Home > Backend Development > Golang > Why Does My Global Error Variable Remain Nil After Initialization in Go?

Why Does My Global Error Variable Remain Nil After Initialization in Go?

Barbara Streisand
Release: 2024-12-13 08:04:10
Original
817 people have browsed it

Why Does My Global Error Variable Remain Nil After Initialization in Go?

Global Error Variable Remains Nil After Initialization: Uncovering the Discrepancy

Consider the following code:

package main

import (
    "os"
    "fmt"
)

var loadErr error

func main() {
    f, loadErr := os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}

// panic won't be called because loadErr is nil
func checkErr() {
    if loadErr != nil {
        panic(loadErr)
    }
}
Copy after login

Perplexingly, this code does not panic, even though loadErr is nil. The same function checkErr() is defined to panic when loadErr is not nil. What is causing this discrepancy?

The Mystery Unveiled

The root of the issue lies in the subtle distinction between local and global variables. In the first code snippet, the line:

f, loadErr := os.Open("asdasd")
Copy after login

creates a new, local loadErr variable within the scope of the main function. This local variable is distinct from the global loadErr declared outside of any function. As a result, the global loadErr remains untouched and nil throughout the execution of the code.

Resolving the Discrepancy

To rectify the issue and ensure that the global loadErr is set, replace := with = in the line mentioned above:

func main() {
    _, = os.Open("asdasd")
Copy after login

This change assigns the value of os.Open() directly to the global loadErr, thereby correctly setting it to the desired value.

Additional Note

If you wish to retain the value of f as well, predeclare f outside the function scope:

var f *os.File

func main() {
    f, = os.Open("asdasd")
Copy after login

Using := in this case would create a local f variable, eclipsing the global one.

The above is the detailed content of Why Does My Global Error Variable Remain Nil After Initialization in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template