java转go,go语言基础的不同点
有java的语言基础,最近想试着转go,花两天时间学习了一下go的基础,做以下记录,加深印象
go语言基础学习视频
-
[go语言标准库中文文档]( Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 (studygolang.com) )
-
go build XX.go编译
-
go run xx.go 编译并运行
-
每个.go 文件都要有对应的包,主函数所在文件的包为package main , 否则无法运行
在同一个文件下(同一级别)的.go文件声明包时都必须是同一个名字,否则会报错,主函数所在的包,包名必须为main
-
导入了其他包时,调用包下面的函数的语法:包名.函数名() ;或者在导包时给包取一个别名,用这个别名调用,这时不能再使用原来的包名调用函数,否则会报错
//在某个文件夹下的某个.go文件如下: package utils func GetName(id int) (name string){ name = "aaa" return } //在另一个文件夹下的主函数文件中调用utils包中函数的示例如下: package main import( "fmt" "xx/xx/xx/utils" ) func main(){ utils.GetName(5) fmt.Print("aaa") } //采用给包取别名的方式如下 :也就是说,要么就使用包名,要么使用别名 package main import( "fmt" uu "xx/xx/xx/utils" ) func main(){ uu.GetName(5)//使用别名可以调用 fmt.Print("aaa") utils.GetName(5)//这里会报错,不能使用原来的报名 }
-
go语言的语句结尾不需要写分号,可以写,但推荐不写
-
go语言导入其他文件使用 import + 其他文件名的字符串形式 : 如基础头文件:import “fmt”
-
go语言严格区分大小写
-
导入多个其他文件可以使用花括号:
import( "fmt" "其他的文件名|文件地址" )
-
函数(方法)的定义使用func关键字
-
go语言的代码块花括号的格式必须如下:
func main(){
//codding
}
func main()
{
//这种写法是错误的
}
-
变量的定义需要用到var ,且定义方法形式较多:
var age int = 10 //变量名写在中间,类型写在后面 var age1 int age1 = 10 // 定义后再赋值 var age2 = 10 //直接赋值,程序根据赋值内容自动判断类型 age3 := 10 //省略var的写法
-
go有4大基本类型 , 分别是数据类型、字符类型、布尔类型、字符串类型
- 数据类型分为有符号类型和无符号类型 , 未赋值时的初始值默认为0,
-
有符号的数据基本类型:int , int8 , int16 , int32 , int64 , float32 , float64
-
无符号的数据基本类型:uint , uint8 ,uint16 , uint32 , uint64
在32位的计算机中 int/uint类型为4个字节,在64位计算机中为8字节,
上面的int8/uint8:8表示8位二进制,即1个字节长度 , 其他的16、32、64是一样的意思
-
- 字符类型,go语言使用byte来表示字符类型,与ASCII码相互对应,byte类型长度为一个字节,能表示255个字符 , 默认值为0
- 布尔类型,bool , 值域为true和false , 默认值false
- 字符串,go中字符串为基本数据类型,java中为字符串对象(注意区分) ,默认值为空字符串
- 数据类型分为有符号类型和无符号类型 , 未赋值时的初始值默认为0,
-
变量的公有和私有,即java中的变量的public访问和private访问
var Age = 10 // 变量名首字母大写 ,在其他的文件中可以通过导入该文件的方式访问该变量,相当于public var age = 11 // 变量名首字母小写 ,在其他的文件中不能访问 ,相当于private
-
go语言中有些方法是会有两个返回值的,第一个返回值一般是我们想要的值,第二个为err错误值,不需要第二个字的时候可以用下划线去接收.
-
go语言中没有用到的变量被定义以及没有用到的文件(包)被导入,程序执行会报错
//如下代码 : 由于name未被使用 ,会因为 name变量的定义报错 package main import "fmt" func main(){ var age int = 10 var name string = "1265" fmt.Println(age) } //如下代码 : 由于fmt包文件未被使用 ,会因为导入了该包而报错 package main import "fmt" func main(){ }
-
控制台输出
fmt.Println()
-
控制台的输入
//输入函数有Scanln() 和 Scanf() //Scanln()一次只能获得一个输入,其中需要传入一个用于接收控制台输入内容的地址 , 输入结束的标志为“回车” var age int fmt.Scanln(&age) // &age表示获取age变量的内存地址,此时从控制台获取一个数据类型,如果输入了其他类型的,程序不报错,但是不能成功接收该输入 //Scanf()可以获得一个或多个输入,其中需要给定多个个参数,第一个为输入类型控制转义字符串 ,输入多个时用用空格分开; 第二位之后的参数都是对应第一个参数中用于接收输入的变量的地址 var age1 int var name string var sex bool fmt.Scanf("%d %s %t" , &age1 , &name , &sex)
-
指针使用(java中没有指针)
//指针中存放的是某一类型数据所在的内存空间的地址值(指针变量中只能存放地址) func main(){ //指针定义 var agePtr *int var age int = 10 agePtr = &age //指向age变量的地址 fmt.Println(*agePtr)//获取指针所指向地址的值