前
还是学一下,这里简单记录一下
正
安装配置
现在用的开发机是win10,就在上面安装了,不过这种安装真的没什么可以说的,尤其是win,下载msi,next下去就可以了,GoROOT
和GOPATH
都会自己配置好的,然后下载一个GoLand做IDE,(实在不喜欢用vscode).settings里配置一下GOROOT
和 GOPATH
(不出意外也会自己配置的),然后开发
包
创建一个项目后,在项目下还要创建一个main包,然后再main包下创建.go文件,写个hello world
,这里说一下main包,应该是go语言要求的main包才是整个项目的入口,所以一定要有一个package main的go文件,然后写一个main函数.import
: 通常写法就是 import "package name"
,其中可以对包重命名,写在package name
前就可以了,例如: import fm "fmt"
可见性规则
: 比较好玩,当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,就是public
的,对外可见的,当是小写字符开头,就是private,对外不可见的.
当你导入一个包但是不用的话,会报错.
注释
和java相同
常量
常量定义格式:const identifier [type] = value
常量的类型只能是bool,数字和字符串.
类型可以省,常量的值必须是在编译期就确定的.但可以使用内置函数
变量
变量定义格式:var identifier type
var identifier [type] = value
局部变量可以用a := 1
这样来声明
变量被声明后会被赋予初值,int=0,float=0.0,bool=false,string=空字符串””,指针=nil
占位符用法,并不像scala中一样,这里用来抛弃赋值,_,b = 1,2
作用域
没什么特殊的,值得一说的就是同名变量,内部的同名变量会覆盖外部的
值类型和引用类型
java和c那一套
基本类型和运算符
Go是强类型语言,不支持隐式转换
布尔bool
没什么好说的
数字类型和float
- int
有int,uint,uintptr,前两个在32位系统上,使用32位,64位则是64位,后一个长度被设定为存放一个指针即可
有符号整数int8(-128 -> 127)
int16(-32768 -> 32767)
int32(-2,147,483,648 -> 2,147,483,647)
int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
无符号整数:uint8(0 -> 255)
uint16(0 -> 65,535)
uint32(0 -> 4,294,967,295)
uint64(0 -> 18,446,744,073,709,551,615)
- float
只有float32和float64float32(+- 1e-45 -> +- 3.4 * 1e38)
float64(+- 5 * 1e-324 -> 107 * 1e308)
值得注意的:
- 尽量使用float64,因为math包返回的都是float64
- Go中不允许不同类型混合使用赋值(包括int 和 int32),但是常量可以赋值到变量(不限类型)
运算符
整除 : /
取余 : %
类型别名
使用type alias int
其中alias就是int的别名
字符类型
byte是uint8的别名,声明的时候也是和java一样用单引号,var c byte = 'A'
字符串
Go中的字符串的字符根据需要占用1-4个字节
字符串比较
比较运算符(==,!=,<,> …),都是把内存中的字符串按字节比较
索引
类似python吧,使用[]来索引,从0开始
字符串拼接
就是+
,但是跟java中类似,并不高效,更好的办法是使用函数strings.Join()或者字节缓冲(bytes.Buffer)
函数小解
基本格式 :func functionName()
括号内部可以写参数,但是类型在参数名后(和java相反),并且后续的 {
不能放在下一行,必须紧跟在声明后面.
符合规范的声明格式:func functionName(parameter_list) (return_value_list) {
…
}
其中
参数列表中,如果一系列参数的类型相同,可以写在一起,例如:a,b int , c string
return_value_list
一般的格式是变量名 类型
但是可以省略变量名.
特殊/内置函数
- init函数,这个函数在每个包完成初始化后自动执行,优先级比main函数高,用于变量初始化
指針
程序在内存中存储它的值,每个内存快有一个地址,通常用十六进制数表示
取地址符是 &
,放在一个变量前使用
当我们想要存储一个地址时,就需要指针了,这是一个特殊的数据类型,使用*
加类型表示执行该类型的指针,例如*int
表示指向int的指针.
声明一个指针 :var p *int
内存地址的大小和所在机器的位数有关,与指向的值得大小无关.*
也可以被放在指针变量名前,就可以取出这个指针指向的地址存储的值,当然可以这样使用:`var == *(&var)
在Go中,指针是不允许运算的