{ "@context": "https://schema.org", "@type": "Article", "headline": "golang变量未定义", "datePublished": "2024-03-23T16:00:37", "dateModified": "2024-03-23T16:00:37", "description": "在 Go 中,如果变量在代码块内声明,则其作用域仅限于该块内。因此,如果在 if 或 else 块中声明变量,则在块外部无法访问该变量。这会导致“变量未定义”的错误。要解决此问题,应将变量声明在块外部,以使其在整个函数中可见。问题内容有人可以告诉我为什么 num 未定义 :: 这是 go 演示链接,您也可以在这里检查此代码:https://play.golang.org/p/zr9tuvtjmx-package mainimport fmtfunc main() { if 7%2 == 0 { ", "publisher": { "@type": "Organization", "name": "Golang学习网", "url": "https://m.17golang.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://m.17golang.com/article/112528.html" } }
登录
首页 >  Golang >  Go问答

golang变量未定义

来源:stackoverflow

时间:2024-03-23 16:00:37 138浏览 收藏

在 Go 中,如果变量在代码块内声明,则其作用域仅限于该块内。因此,如果在 if 或 else 块中声明变量,则在块外部无法访问该变量。这会导致“变量未定义”的错误。要解决此问题,应将变量声明在块外部,以使其在整个函数中可见。

问题内容

有人可以告诉我为什么 num 未定义 :: 这是 go 演示链接,您也可以在这里检查此代码: https://play.golang.org/p/zr9tuvtjmx-

package main
import "fmt"
func main() {
    if 7%2 == 0 {
        num := "first"
    } else {
        num := "second"
    }
    fmt.Println(num)

  }

解决方案


这与词法作用域有关,请在此处查找 introduction

基本上,{} 大括号内的任何变量都被视为该块内的新变量。

所以在上面的程序中您创建了两个新变量。

块类似于将变量包围起来。

如果您在街区之外,则看不到它。您需要位于该块内才能看到它。

package main

import "fmt"

func main() {
    if 7%2 == 0 {
        // you are declaring a new variable,
        num := "first"
        //this variable is not visible beyond this point
    } else {
        //you are declaring a new variable,
        num := "second"
        //this variable is not visible beyond this point
    }
    // you are trying to access a variable, which is declared in someother block,
    // which is not valid, so undefined.
    fmt.println(num)

}

您正在寻找的是这样的:

package main

import "fmt"

func main() {
    num := ""
    if 7%2 == 0 {
        //num is accessible in any other blocks below it
        num = "first"
    } else {
        num = "second"
    }
    //num is accessible here as well, because we are within the main block
    fmt.Println(num)
}

本篇关于《golang变量未定义》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>