# 3-Go 语言如何赋值,比如 go 语言的多重赋值
笔者这里在学习 go 语言开发以太坊的时候,遇到过下面的语句:
account := common.HexToAddress("0x71c7656ec7ab88b098defb751b7401b5f6d8976f") | |
balance, err := client.BalanceAt(context.Background(), account, nil) | |
if err != nil { | |
log.Fatal(err) | |
} | |
fmt.Println(balance) |
这里笔者有一个疑问,以下语句的赋值是什么意思?
balance, err := client.BalanceAt(context.Background(), account, nil) |
为什么语句中,左边的变量会有两个而且用逗号隔开?
带着这个疑问,笔者又重新细致的阅读了 go 语言的赋值语句。
# Go 语言变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字:
var identifier type |
var 变量名称 type |
可以一次声明多个变量:
var identifier1, identifier2 type |
案例如下:
var a, c int = 1, 2 |
# 变量声明
# 1. 指定变量类型,如果没有初始化,则变量默认为零值。
// 字符串为 ""(空字符串) | |
var a string | |
fmt.Println(a) | |
// 没有初始化就为零值 | |
var b int | |
fmt.Println(b) | |
//bool 零值为 false | |
var c bool |
总结一下,如果没有初始化变量,各类型变量的初始值:
- 数值类型(包括 complex64/128)为 0
- 布尔类型为 false
- 字符串为 “”(空字符串)
- 以下几种类型为 nil:
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error //error 是接口
# 2. 根据值自行判定变量类型
package main | |
import "fmt" | |
func main() { | |
var a = true | |
fmt.Println(a) | |
} |
输出的结果为:
true
# 3. 如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误;直接使用下面的语句即可:
v_name := value |
# 4. 多变量声明
Go 语言支持多重赋值,这意味着你可以同时给多个变量赋值。
多重赋值:
package main | |
import "fmt" | |
func main() { | |
var x, y, z int | |
x = 10 | |
y = 20 | |
z = 30 | |
fmt.Println("x:", x) | |
fmt.Println("y:", y) | |
fmt.Println("z:", z) | |
} |
同时赋值多个变量:
package main | |
import "fmt" | |
func main() { | |
x := 10 | |
y := 20 | |
z := 30 | |
fmt.Println("x:", x) | |
fmt.Println("y:", y) | |
fmt.Println("z:", z) | |
} |
多重赋值示例:
package main | |
import "fmt" | |
func main() { | |
a, b := 5, 10 | |
fmt.Println("Before swap:") | |
fmt.Println("a:", a) | |
fmt.Println("b:", b) | |
a, b = b, a // Swap the values using multiple assignment | |
fmt.Println("After swap:") | |
fmt.Println("a:", a) | |
fmt.Println("b:", b) | |
} |
在多重赋值中,右侧的表达式会在赋值操作之前求值,然后将其值赋给左侧的变量。这使得交换两个变量的值非常简单,如上面的示例所示。
在 Go 语言中,函数可以返回多个值,这是一项非常有用的特性。返回多个值的函数通常用于在单个函数调用中返回多个相关的结果,以减少函数的调用次数和代码复杂性。多个返回值在 Go 语言中通常被用于处理成功和错误情况、结果和错误信息等。
以下是一个返回多个值的函数示例,展示了如何解释和使用这些值:
package main | |
import "fmt" | |
// 一个返回姓名和年龄的函数 | |
func getUserInfo() (string, int) { | |
name := "Alice" | |
age := 30 | |
return name, age | |
} | |
func main() { | |
// 调用返回多个值的函数,并将结果分解为独立的变量 | |
userName, userAge := getUserInfo() | |
fmt.Println("User Name:", userName) | |
fmt.Println("User Age:", userAge) | |
} |
在这个示例中,getUserInfo 函数返回两个值:姓名和年龄。在 main 函数中,我们调用了 getUserInfo 函数并将返回的值分解为 userName 和 userAge 两个变量,然后我们可以分别使用这两个变量。
这种方式使得函数返回多个相关的值非常方便,而且代码更加清晰易读。当然,你也可以使用 _ 来忽略其中一个或多个不感兴趣的返回值,例如:
userName, _ := getUserInfo() // 忽略年龄 |
总结起来,Go 语言的多返回值机制允许你在函数中返回多个相关的值,并且使用解构赋值的方式将这些值分解到不同的变量中,从而简化代码并提高可读性。