Go语言与Java语言的区别,必须区别。

Posted 程序彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言与Java语言的区别,必须区别。相关的知识,希望对你有一定的参考价值。

Go语言与Java语言的区别

  1. var arr []int,这是arr是一个切片slice。而不是数组。切片和数组有区别
  2. 数组是基本数据类型(值类型),相比较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
}

值传递内存图:
在这里插入图片描述

  1. 若使用引用传递(指针),则通过一个指针指向该数组某个位置
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)
}
  1. 在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)
  1. 生成随机数保存于数组并反转练习
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语言的区别,必须区别。的主要内容,如果未能解决你的问题,请参考以下文章

java语言基础与go语言基础的区别

C语言与Go语言有什么区别?

C语言与Go语言有什么区别?

java语言基础与go语言基础,循环语句的区别

浅谈Go语言函数与方法的区别

Go 语言范围(Range)