Go语言与Java语言的区别,必须区别。
Posted 程序彤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言与Java语言的区别,必须区别。相关的知识,希望对你有一定的参考价值。
Go语言与Java语言的区别
- var arr []int,这是arr是一个切片slice。而不是数组。切片和数组有区别
- 数组是基本数据类型(值类型),相比较Java的数组是引用数据类型,故go语言的数组是值拷贝。如下:
func main(){
var array =[3]int{1,2,3}
test(array) // 无效的调用
fmt.Println(array) // [1 2 3]
}
func test(arr [3]int){
arr[0] = 666
}
值传递内存图:
- 若使用引用传递(指针),则通过一个指针指向该数组某个位置
func test1(arrP* [3]int){ // 引用传递(需使用到指针),改变数组本身的值
(*arrP)[0] = 777
}
func main(){
var array =[3]int{1,2,3}
// test(array) // 无效的调用
test1(&array)
fmt.Println("main()的array",array)
test2(array)
test3(array)
}
- 在go语言中,长度是数据类型的一部分,数组的长度如果不同决定是不同的数据类型,不可适配。
func test3(arr [4]int){
arr[0] = 10
fmt.Println("数组是值传递,不使用指针,改变原数组的值毫无可能")
}
func main(){
var array =[3]int{1,2,3}
// test(array) // 无效的调用
test1(&array)
fmt.Println("main()的array",array)
test2(array)
test3(array) -> 编译出错!!!
}
5. 必须强制转换
//3
sum := 0
var avg float64
for _,value := range arr{
sum+=value
}
avg = float64(sum)/float64(len(arr))
fmt.Println(sum,"-",avg)
- 生成随机数保存于数组并反转练习
package main
import(
"fmt"
"time"
"math/rand"
)
// 随机数组的反转打印
func main(){
var arr [5] int
rand.Seed(time.Now().UnixNano())
len := len(arr)
for i:=0;i<len;i++{
arr[i] = rand.Intn(100)
}
fmt.Println(arr)
start := 0
end := len-1
for start<end{
temp := arr[start]
arr[start] = arr[end]
arr[end] = temp
start++
end--
}
fmt.Println(arr)
}
以上是关于Go语言与Java语言的区别,必须区别。的主要内容,如果未能解决你的问题,请参考以下文章