【问题标题】:Initialisation vs assignment [duplicate]初始化与分配[重复]
【发布时间】:2020-07-18 14:14:18
【问题描述】:

:=运算符用于初始化值,然后=运算符用于赋值

  var fruits := [5]string{"Apple", "Orange", "Banana", "Grape", "Plum"}

给出语法错误(syntax error: unexpected :=, expecting = go),

在哪里,

  var fruits = [5]string{"Apple", "Orange", "Banana", "Grape", "Plum"}

语法工作正常。


为什么:=不允许用var关键字初始化?

【问题讨论】:

标签: go


【解决方案1】:

:= 视为declare and assign

来自语言specification

与常规变量声明不同,短变量声明可以重新声明变量,前提是它们最初在同一个块(或参数列表,如果块是函数体)中具有相同类型,并且至少有一个非-空白变量是新的。因此,重新声明只能出现在多变量短声明中。重新声明不引入新变量;它只是为原始值分配一个新值。

field1, offset := nextField(str, 0)
field2, offset := nextField(str, offset)  // redeclares offset
a, a := 1, 2                              // illegal: double declaration of a or no new variable if a was declared elsewhere

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 2014-07-17
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2014-03-22
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多