package main
import "fmt"
func main() {
a := [...]int{12, 78, 50} // ... makes the compiler determine the length
var b [3]int
b = a
fmt.Println(a)
fmt.Println(b)
}
注意,数组的长度n也是数组数据类型的一部分。 因此[5]int和[25]int是不同的数据类型。当然这也能印证另外一点,数组声明之后其长度是不能再改变的。我们前面一段程序中声明了数组变量b,数据类型为[3]int,跟数组a的变量类型是一样的,因此类型兼容,才可以赋值,如果我们改成下面的程序,将数组b声明为var b [4]int就会报错:
package main
import "fmt"
func main() {
a := [...]int{12, 78, 50} // ... makes the compiler determine the length
var b [4]int
b = a
fmt.Println(a)
fmt.Println(b)
}
package main
import "fmt"
func main() {
a := [...]string{"USA", "China", "India", "Germany", "France"}
b := a // a copy of a is assigned to b
b[0] = "Singapore"
fmt.Println("a is ", a)
fmt.Println("b is ", b)
}
Go Playground在线运行 该程序中我们将数组a赋值给数组b,Golang会把数组a的所有元素拷贝一份给数组b,然后我们将数组b的第一个元素赋值为Singapore,并不影响数组a。执行结果如下:
a is [USA China India Germany France]
b is [Singapore China India Germany France]
package main
import "fmt"
func changeLocal(num [5]int) {
num[0] = 55
fmt.Println("inside function ", num)
}
func main() {
num := [...]int{5, 6, 7, 8, 8}
fmt.Println("before passing to function ", num)
changeLocal(num) //num is passed by value
fmt.Println("after passing to function ", num)
}
package main
import "fmt"
func main() {
a:= [...]float64{67.7, 89.8, 21, 78}
for i:= 0; i < len(a); i++ {
fmt.Printf("%d th element of a is %.2f\n", i, a[i])
}
}
0 th element of a is 67.70
1 th element of a is 89.80
2 th element of a is 21.00
3 th element of a is 78.00
Golang针对数组提供了一种更加简洁的遍历方式,结合for语句和range。
package main
import "fmt"
func main() {
a := [...]float64{67.7, 89.8, 21, 78}
sum := float64(0)
for i, v := range a {//range returns both the index and value
fmt.Printf("%d the element of a is %.2f\n", i, v)
sum += v
}
fmt.Println("\nsum of all elements of a",sum)
}