在Go中交换变量值的最佳方法?

Nic*_*ler 4 swap go slice

是否可以交换像python中的元素?

a,b = b,a
Run Code Online (Sandbox Code Playgroud)

或者我们必须使用:

temp = a
a = b
b = temp
Run Code Online (Sandbox Code Playgroud)

Sam*_*ted 20

对的,这是可能的.假设a并且b具有相同的类型,提供的示例将正常工作.例如:

a, b := "second", "first"
fmt.Println(a, b) // Prints "second first"
b, a = a, b
fmt.Println(a, b) // Prints "first second"
Run Code Online (Sandbox Code Playgroud)

Run sample on the playground

这既合法又惯用,因此无需使用中间缓冲区.


abh*_*ink 9

是的,可以使用元组赋值交换元素:

i := []int{1, 2, 3, 4}
fmt.Println(i)

i[0], i[1] = i[1], i[0]
fmt.Println(i)

a, b := 1, 2
fmt.Println(a, b)

a, b = b, a // note the lack of ':' since no new variables are being created
fmt.Println(a, b)
Run Code Online (Sandbox Code Playgroud)

输出:

[1 2 3 4]
[2 1 3 4]
1 2
2 1
Run Code Online (Sandbox Code Playgroud)

示例:https://play.golang.org/p/sopFxCqwM1

更多详细信息:https://golang.org/ref/spec#Assignments