在http://golang.org/doc/effective_go.html#arrays阅读了以下内容之后…
- 数组是值。将一个数组分配给另一个数组将复制所有元素。
- 特别是,如果将数组传递给函数,它将接收该数组的副本,而不是指向该数组的指针。
......我希望在下面的代码arr2
是从不同的arr
,和main()
的arr
是从不同shuffle()
的arr
。有人可以解释一下下面的代码为什么会改组arr2
吗?我知道Go还是一门年轻的语言;也许对数组的处理方式发生了变化?
package main
import (
"fmt"
"rand"
"time"
)
func shuffle(arr []int) {
rand.Seed(time.Nanoseconds())
for i := len(arr) - 1; i > 0; i-- {
j := rand.Intn(i)
arr[i], arr[j] = arr[j], arr[i]
}
}
func main() {
arr := []int{1, 2, 3, 4, 5}
arr2 := arr
shuffle(arr)
for _, i := range arr2 {
fmt.Printf("%d ", i)
}
}
我认为您的问题是您混淆了数组和切片。
数组是固定长度的值列表。实际上,您的示例中没有使用任何数组。可以通过以下几种方法声明数组:
arr1 := [3]int{1, 2, 3} // an array of 3 integers, 1-3
arr2 := [...]int{1, 2, 3} // same as the previous line, but we're letting
// the compiler figure out the size of the array
var arr3 [3]int // a zeroed out array of 3 integers
您正在使用切片。切片是对基础数组的引用。有几种分配新切片的方法:
slice1 := []int{1, 2, 3} // a slice of length 3 containing the integers 1-3
slice2 := make([]int, 3) // a slice of length 3 containing three zero-value integers
slice3 := make([]int, 3, 5) // a slice of length 3, capacity 5 that's all zeroed out
其他任何切片分配都只是复制对数组的引用。
现在我们已经确定了
arr := []int{1, 2, 3, 4, 5}
创建一个切片,该切片引用包含数字1-5的匿名基础数组。
arr2 := arr
重复该引用-它 不 复制底层数组。因此,存在一个基础数组和对其的两个引用。这就是为什么修改arr的内容时arr2的内容会更改的原因。他们引用相同的数组。
问题内容: 我想解析一些json数据。数据如下所示: {“ id”:“ someId”,“ key_1”:“ value_1”,“ key_2”:“ value_2”,“ key_3”:“ value_3”,“点数”:[[1487100466412,“ 50.032178”,“ 8.526018”,300 ,0.0,26,0],[1487100471563,“ 50.030869”,“ 8.525
数组是一个具有相同数据类型的元素组成的固定长度的有序集合。 在Go语言中,数组是值类型,长度是类型的组成部分,也就是说”[10]int“和“[20]int”是完全不同的两种数组类型。 同类型的两个数组支持”==”和”!=”比较,但是不能比较大小。 数组作为参数时,函数内部不改变数组内部的值,除非是传入数组的指针。 数组的指针:*[3]int 指针数组:[2]*int 示例1: package ma
数组是一个可以存放相同数据类型数据的定长序列。由于数组是定长的,在使用场景并不丰富,所以在 Go 语言中通常使用的是切片(Slice)。想要使用切片,就先要了解数组,所以在本文先介绍 Go 语言中数组的使用。 1. 数组的声明 数组的声明形式形如var 数组名 [数组长度]数组类型,其中数组类型可以是数组本身,也就是数组类型的数组,这样就构成了多维数组。和变量的声明相同,数组在声明时会初始化变量类
问题内容: 我已经开始使用https://mholt.github.io/json-to-go/将API JSON转换为go结构,但我真的很喜欢它,但是我仍然坚持如何在Report Definition结构中初始化Filters数组结构如下所示。 我似乎无法引用在Filters结构甚至是Filters结构中声明的项,以创建新的Filter项目并将其附加到Filters。 是否可以使用原样编写的Re
问题内容: 嗨,我在解组嵌套的JSON数组时遇到问题。我应该创建什么结构?我想避免使用尽可能多的东西,但是我真的不知道在这种情况下是否有可能。 杰森,我想解组: 和我想用来解组的结构: 链接到示例:https : //play.golang.org/p/owuMptNrix 问题答案: 是的,答案只是一小部分: 好感谢你的问题,我发现这个错误的工具,我总是用它的Json操作一起去,它可以为你节省很
下面是一个java类CreateDoc,它从一个作为生产者端的web服务发送到另一个作为消费者端的web服务,其内容类型为:json 下面是类表示 一旦我在消费者端接收到作为json的列表,我就不能将其用作java对象,并且内容类型是数组,其中json嵌套在数组中。 以下是代表: 问题是如何处理这一点,并能够使用数据和表示为列表。