慢聊Go之GoVSJava之微观比较(2)|Go主题月

683 阅读4分钟

image.png

前言

周一了,不知道大家都忙么。有没有好好地学习呢?嘻嘻,今天,我抽时间,又把Java与Go之间进一步做了对比。

那么,我们就来聊一下,今天对比的部分内容。

常用包

众多周知,开发过程中,更多的时候,在使用开发包来辅助开发。那么,具体的情况是什么样子的呢?

GoJava
IO流操作bufio/osjava.lang.io
字符串操作stringsjava.lang.String
容器container(heap/list/ring)java.lang.Collection
syncjuc
时间timejava.time/java.lang.Date
底层Unsafeunsafeunsafe类
算数操作mathjava.math

我们可以从以上表格看到常用操作的包明细。

想要学习更多Go中文API文档,Go的API包文档

Go的常用基础数据类型和Java的基础数据类型对比

Go中的常用基础数据类型
1.布尔型:关键字【bool】: true   false
2.有符号整形:头一位是代表正负
            int   默认整形   48字节         		  32位或64int8             1字节                     8int16            2字节                     16int32            4字节                     32位
            in64             8字节                     64位
       		【int32还是64位取决于操作系统的位数,现在电脑一般都是64位的了,所以一般都是64位】
3.无符号整形
            uint             48字节          	 32位或64uint8             1字节                     8uint16            2字节                     16uint32            4字节                     32uint64            8字节                     644.浮点型
            注:go语言没有float类型,只有float32float64float32           32位浮点数  
            float64           64位浮点数
5.字符串
            string
6. byte     等同uint8,只是类似于一个别名的东西
   rune     等同int32	 只是一个别名,强调表示编码概念对应的数字
Go中派生数据类型
注:这里简单列举一下
指针  	Pointer
数组  	Array[]
结构体 	struct
进程管道: channel 
函数 		 func
切片  	slice
接口 		interface
哈希 		 map

Go和Java的变量对比

Go的变量
package main

import(
   //包含print函数
   "fmt"
)
func main() {
   //var  变量名  变量类型 = 变量值
   var name string = "xiao_li"
   //方法内部可以直接使用 【 变量名 := 变量值 】 赋值,方法外不可以
   name2:="xiao_hong"
   fmt.Println("name = ",name)
   fmt.Println("name2 = ",name2)
}
Java的变量
public class test {
    public static void main(String[] args) {
        //变量类型  变量名 = 变量值
        String name = "xiao_li";
        int i = 10;
        System.out.println("name ="+name);
        System.out.println("i ="+i);
    }
}

Go和Java的常量对比

Go的常量

Go中的常量和Java中的常量含义有一个本质的区别: Go中的常量是指在编译期间就能确定的量(数据),而java中的常量是指被赋值一次后就不能修改的量(数据)。 所以两者不一样,因为Java中的常量也是JVM跑起来后赋值的,只不过不允许更改; Go的常量在编译后就确实是什么数值了。

package main

import(
   //包含print函数
   "fmt"
)
func main() {
   //const  常量名  常量类型 = 常量值   显示推断类型
   const name string = "const_li_ming"
   //隐式推断类型
   const name2 ="const_xiao_hong"
   fmt.Println("name = ",name)
   fmt.Println("name2 = ",name2)
}
Java的常量
public class test {
    //【访问修饰符】 【静态修饰符】final修饰符   常量类型   常量名 =  常量值;
    public static final String TAG = "A";    //一般设置为static静态
    public static void main(String[] args) {
        System.out.println("tag= "+TAG);
    }
}

Go与Java的赋值对比

Go的赋值

Go方法内的赋值符号可以用 := ,也可以用 =,方法外只能用 = 。

package main

import(
   //包含print函数
   "fmt"
)

//方法外只能用 = 赋值
var my_name  string = "my_name"
var my_name2 = "my_name2"
//my_name3:="my_name3"    不在方法内,错误

func main() {
   fmt.Println("name = ",my_name)
   fmt.Println("name2 = ",my_name2)
}

Go支持多变量同时赋值:

package main

import(
   //包含print函数
   "fmt"
)

func main() {
   //多变量同时赋值
   var name,name2 = "li_ming","xiao_hong"
   fmt.Println("name = ",name)
   fmt.Println("name2 = ",name2)
}

Go丢弃赋值:

package main

import(
   //包含print函数
   "fmt"
)

func main() {
   //丢弃赋值    把 1和2丢弃 只取3
   //在必须一次取两个以上的值的场景下,又不想要其中一个值的时候使用,比如从map中取key,value
   var _,_,num = 1,2,3
   fmt.Println("num = ",num)
}
Java的赋值
public class test {
    public static void main(String[] args) {
        //直接用 = 赋值
        String name = "li_ming";
        int i = 10;
        System.out.println("name ="+name);
        System.out.println("i ="+i);
    }
}
总结

跟着之前学习Java的脚步,我们一步步的分析,Go与Java的对比。

作为一名Javaer转型Goer 其实是so easy。