你能在Go中一次声明多个变量吗?

r1zhe5dt  于 2023-04-09  发布在  Go
关注(0)|答案(9)|浏览(127)

可以使用Golang同时声明多个变量吗?
例如,在Python中,你可以这样写:

a = b = c = 80

并且所有值将是80。

b5lpy0ml

b5lpy0ml1#

是的,您可以:

var a, b, c string
a = "foo"
fmt.Println(a)

你可以对内联赋值做一些类似的事情,但不太方便:

a, b, c := 80, 80, 80
3df52oht

3df52oht2#

另一种方法是这样的

var (
   a = 12
   b = 3
   enableFeatureA = false

   foo = "bar"
   myvar float64
   anothervar float64 = 2.4
)

也适用于const

const (
  xconst    = 5
  boolconst = false
)
rdrgkggo

rdrgkggo3#

在语言规范方面,这是因为变量是用以下方式定义的:

VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .

(From“变量声明”)
一个类型的标识符列表,分配给一个表达式或ExpressionList。

const a, b, c = 3, 4, "foo"  // a = 3, b = 4, c = "foo", untyped integer and string constants
const u, v float32 = 0, 3    // u = 0.0, v = 3.0
5n0oy7gb

5n0oy7gb4#

是的,你可以,它比看起来稍微微妙一些。
首先,您可以简单地执行以下操作:

var a, b, x, y int  // declares four variables all of type int

可以在函数参数声明中使用相同的语法:

func foo(a, b string) {  // takes two string parameters a and b
    ...
}

然后是同时声明和赋值变量的简短语法。

x, y := "Hello", 10   // x is an instance of `string`, y is of type `int`

Golang中经常遇到的模式是:

result, err := some_api(...)  // declares and sets `result` and `err`
if err != nil {
    // ...
    return err
}

result1, err := some_other_api(...)   // declares and sets `result1`, reassigns `err`
if err != nil {
    return err
}

所以你可以在:=操作符的左边赋值给已经定义好的变量,只要至少有一个被赋值的变量是新的。否则它就不是格式良好的。这很棒,因为它允许我们在多个API调用中重用同一个错误变量,而不必为每个API调用定义一个新的变量。但是要注意以下情况:

result, err := some_api(...)  // declares and sets `result` and `err`
if err != nil {
    // ...
    return err
}

if result1, err := some_other_api(...); err != nil {   // result1, err are both created afresh, 
                                                       // visible only in the scope of this block.
                                                       // this err shadows err from outer block
    return err
}
ercv8c1e

ercv8c1e5#

有几个答案是不正确的:他们忽略了OP询问是否可以一次性将多个变量设置为相同值的事实(抱歉使用双关语)。
在Go语言中,如果a、B、c是变量,你就不能这样做,也就是说,你必须单独设置每个变量:

a, b, c := 80, 80, 80

但是如果a,b,c是常量,你可以:

const (
        a = 80
        b
        c
    )
62o28rlo

62o28rlo6#

试试这个在Playground:https://play.golang.org/

package main

import "fmt"

func main() {
    a, b := "a", "b"; //Declare And Assign
    var c, d string;  //Declare Only
    fmt.Println(a,b);
    fmt.Println(c,d);
}
3bygqnnd

3bygqnnd7#

另一种方法是使用var进行包级赋值

package main

import (
    "fmt"
)

var (
    a, b, c = 80, 80 ,80
)

func main() {
    fmt.Println(a, b, c)
}
uklbhaso

uklbhaso8#

长说明

var varName1, varName2 string = "value","value"

短宣告

varName1,varName2 := "value1","value2"
qrjkbowd

qrjkbowd9#

在分号的帮助下,我们可以实现类似于它。

c := 80; b := c; a := b

c := 80
b := c
a := b

但是playground将格式化没有分号的代码,在源代码文件中没有。

相关问题