登录
首页 >  Golang >  Go问答

Go 中的简洁声明

来源:stackoverflow

时间:2024-03-13 09:18:22 231浏览 收藏

你在学习Golang相关的知识吗?本文《Go 中的简洁声明》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在学习 go,但我不明白代码如何允许我重新声明相同的变量“phones”。我认为你只能在函数作用域内短声明一个变量,然后只有当你用它声明一个新变量时才能重新声明该变量。但使用下面的代码,我可以短声明“phones”两次,而无需在第二个短声明语句中声明新变量。

package main

import "fmt"

func main() {
    phones := map[string]string{
        "bowen": "202-555-0179",
        "dulin": "03.37.77.63.06",
        "greco": "03489940240",
    }

    multiPhones := map[string][]string{
        "bowen": {"202-555-0179"},
        "dulin": {"03.37.77.63.06", "03.37.70.50.05", "02.20.40.10.04"},
        "greco": {"03489940240", "03489900120"},
    }

  fmt.Println(phones)

  who, phone := "greco", "N/A"
  if phones := multiPhones[who]; len(phones) >= 2 {
    fmt.Println(phones)
    phone = phones[1]
  }

  fmt.Printf("%s's 2nd phone number: %s\n", who, phone)
}

解决方案


go 不允许在同一范围内重新定义变量。 您拥有的代码包含两个不同范围内的变量。 这在 go 中是允许的。这不成问题。 您的代码类似于:

func main() { 
    name := "adam"
    if name := true; name != false {   // the var name here is in if scope.
 
        fmt.Println("name in if scope is :", name)
    }

    fmt.Println("name out if scope is : ", name)
    
    // name := "jawad" this is error. redifined in same scope not allowed.
}

不,这是错误的。 go 是块作用域,而不是函数作用域。 每个变量可以每个 声明一次,并且 if 启动一个新块。

(请注意,这适用于任何类型的声明,无论是短声明还是长声明。)

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go 中的简洁声明》文章吧,也可关注golang学习网公众号了解相关技术文章。

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