Go的基本代码形式:
package main//包声明,main包是每个项目的入口
import "fmt"//导入包文件
func main(){//func关键字定义函数
fmt.Println("Hwllo,World!")//go中的打印函数
}
tips : Go语言每行代码行尾是不需要像Java加分号
;Go编译器会把换行符号解析成分号,也就说明 { 不能单独成行,编译器会在前面加上分号导致无法识别.
变量和常量
-
变量用var来声明(Java不同)
-
常量用const声明(Java用final)
最不一样的是Go中变量定义规则: var 变量名 类型 = XXX
在Go语法中:
如果不设置值:
数字类型默认值为0,布尔类型为false,字符串为""
接口,指针,map,函数的默认值为nil
另外:
:= 含义是声明并赋值
= 则是给已经声明的变量赋值
指针
Go语言支持指针,默认值为nil,也可以用new来新建对象。
循环条件:
Go中的switch语句中每个case的代码块执行后不需要加入break;会自动终止。
并且Go中只有for循环,没有while关键字
int
Go中的int可以自定义大小:int8,int16,int32,int64,分别对应该位数的整数。
float
浮点数可以再float后加上数字代码长度:float32,float64
复数类型
Go中相较于java具有复数类型:
类型名字为complex64,complex128,其中实部和虚部分别由float32和float64组成。
real(a)用于获取复数的实部
imag(a)用于获取复数的虚部
字符串
Go字符串按照字节存储,不同字符占用不同数目的字节大小。
字符按照Unicode编码存储,汉字占3个字节,英文占1个字节,节省空间。
数组
数组的定义:
var a [大小]int//声明一个int类型的数组并且可以定义数组同时初始化:
var b [3]int=[3]int{1,2,3}
在初始化数组的时候,大小不同的数组不能进行赋值操作,编译时会看成两种类型:
例如 [3]int不能与[4]int 进行赋值操作
数组按照值来传递
slice
slice切片很像Python,是一种拥有相同类型元素的可变长序列,与数组很像
这是因为切片的底层就是数组。
s := make([]int,10)//make函数定义了[]int类型的切片,长度为10如果想结束s,释放:
s = nil//垃圾回收机制会回收slice的空间
切片是左闭右开的,例如:
s[0:3]---->下标{0,1,2}
slice的特点是可以进行动态的修改,append方法可以再原来的切片是插入元素,分为开头,结尾,指定位置,数组可以转换成slice再进行插入操作。
当进行插入操作时,slice对应的底层数组已满,Go则会创建一个更大的新数组,来进行插入操作。
copy()函数可以用于切片间的赋值,只涉及到元素的拷贝和覆盖,不涉及到新空间的创建。
map
Go中也提供了map这种存储键值对的无序集合,底层实现是哈希表。
m1 := make(map[string]int) m2 := map[stirng]int{ "k1":v1 }访问map可以用:map[k]获取k对应的值,不存在第二个返回值ok为false
map[key]=value可以进行元素的添加,存在则更新,不存在就新增key-value键值对。
删除元素可以用delete函数:
delete(map,k)//删除对应map中的k键值对
需要注意的是:
- map在元素赋值之前应该初始化(也可以在初始化时候赋值)
- map的默认值是nil,这时进行元素赋值操作会报错。
struct
struct是复合类型,非引用类型,复合类型是值传递,而引用类型是引用传递。
Go中struct的定义也和正常顺序有出入:
type Person struct{
name string
age int
}
var p1 Person
p2 :=Person("Jack",18)
可以看出经过比较,struct的作用和C++中的struct作用差不多,可以充当Java中的对象,并且也具有默认的构造方法.
可以通过p2.name来访问成员变量
结构体指针
var pp *Person
pp:=new(Person) 创建指向Person结构体的指针pp
pp.name="Json" //Go的语法糖可以直接用结构体指针.成员名来访问对应成员的值。
make函数用于slice,map,chan分配内存,返回类型本身。
new函数返回类型对应的指针,主要用于struct初始化中
总结:
总的来说,Go中语法大部分和其他语言例如C++,Java的语法类似,但也有自己特殊的规则,除此之外,Go中取消了其他语言中的语法例如while,如果想要掌握Go,使用Go来进行编程,那就要熟悉Go的这些特殊的语法,能够将其语言的特性发挥出来,形成一种常识。