相关疑难解决方法(0)

为什么在Go中有两种方式声明变量,有什么区别以及使用哪些?

根据Go参考,有两种声明变量的方法

Variable_declarations(格式为var count = 0var count int)

Short_variable_declarations(格式为count := 0)

我发现决定使用哪一个是非常令人困惑的.

我所知道的差异(到现在为止)是:

  • 我只能count := 0在函数范围内使用格式.
  • count := 0可以 在多变量简短声明中重新声明.

但就我所知,他们的行为确实相同.在参考文献中它还:

它(count:=0方式)是具有初始化表达式但没有类型的常规变量声明的简写

我的困惑是:

  • 如果一个只是另一个的简写方式,他们为什么表现不同?
  • Go的作者如何关注两种方式来声明一个变量(为什么它们没有合并为一种方式)?只是为了迷惑我们?
  • 在使用它们时,我是否还应该睁大眼睛,以防我掉进坑里?

variables var go

29
推荐指数
1
解决办法
1万
查看次数

为什么可以在Go中的多个return语句中重新定义err

考虑以下示例来说明问题(它只是为了解释问题而构建的,但我在书中看到了类似的代码以及实际项目中的代码):

package main

import (
    "strconv"
    "fmt"
    "log"
)

func main() {
    n1, err := strconv.Atoi("1")
    if err != nil {
        log.Panicf("%v", err)
    }

    n2, err := strconv.Atoi("2")
    if err != nil {
        log.Panicf("%v", err)
    }

    // err := fmt.Errorf("new error") <- line 1

    // n1, err := strconv.Atoi("3") <- line 2

    fmt.Printf("n1 = %d, n2 = %d\n", n1, n2)
}
Run Code Online (Sandbox Code Playgroud)

编译器不抱怨的重新定义err,但如果我取消<- line 1或者<- line 2,它会抱怨no new variable on left side of := …

variable-assignment go

9
推荐指数
1
解决办法
832
查看次数

标签 统计

go ×2

var ×1

variable-assignment ×1

variables ×1