GO语言的基础语法
go是一门强变量类型
在GO里面大部分运算符的使用和优先级都和C++很类似 Go语言变量的声明 var a =“initial”这种方式 一般会自动推到变量的类型 在Golang里面 另一种声明变量的方式是 变量名:= 值 例:f:=float32(e) 声明常量把var改成const即可constant常量常数 在goland里面的常量它没有确定的类型 会根据使用的上下文 来自动确定类型 golang里面的if else和C++里面的写法很类似 不同点是go里面的if后没有括号()如果在if后写了()在保存的时候编译器会自动去掉()
golang里面的循环:
没有while dowhile循环只有唯一的一种for循环,最简单的for循环就是for里面什么都不写,代表一个死循环。
golang里面的switch分支结构:
看起来和c语言c++也相似 但是在c++里面switch如果没有加上break的话case是会继续跑下去的 但在go语言中,case1case2case3 执行完case1后将直接跳过case2case3运行
数组:
就是一个具有编号且长度固定的元素式类,在正式的业务代码里面,很少直接用数组,因为它的长度是固定的,更多的时候用的是切片。
切片:
不同于数组 是一个更变长度的数组 可以任意时刻去更改长度 切片可以用append去添加元素 append的用法必须把结构赋值给元素组 例:s= append(s,“d”)
map:
哈希 字典,可以用make去创建一个空map,m:=make(map[string]int)
range:
用range遍历的时候 对于数组会返回两个值 第一个值是索引 第二个值是对应位置的值 如果我们不需要索引的话可以用下划线去for range,假如遍历map的话 例如:for k,v:= range m{}那么第一个值是key,第二个值是value
函数:
func add (a int,b int)int { return a+b } 这是在go语言里最简单的实现两个变量相加的函数,跟其他语言不一样的是 go语言里面的变量类型是后置的 golang里面的函数是原生支持返回多个值 在实际的业务逻辑代码里面,几乎所有的函数都返回多个值。第一个值是真正的返回结果,第二个值是错误信息
指针:
golang也初步支持指针 相比c++所支持的指针,golang的操作非常有限。指针的一个用途就是对常用的参数进行修改
结构体:
大类型的字段的结合。例如:定一个user结构体,它包含name和password。我们可以用结构体的名称去初始化一个结构体变量 初始化的时候需要存入每个字段的初始值,假如没有初始化的字段的话就会显示空值,字符串就会空字符串。 Type user structure{ Name string Password string } Func main(){ a := user {name:”he”,password:”1234”}
d.name =“he”对于结构体我们可以用.字段来读取写入结构体里面的内容
d.password=“1234”
结构体同样也能作为函数的参数
结构体方法:
在golang里面可以对结构体定义一些方法。实现结构体方法的时候也有两种写法,一种是不带指针,例如function (u user)CheckPassword (password string)bool{ return u.password == password } 一种是带指针,*例如function (u user)resetPassword (password string)bool{ return u.password == password 带指针的话就对结构体进行修改
错误处理:
golang里面符合语言的错误处理的习惯是使用一个单独的返回值来传递错误信息,不同于java里面使用的异常,在golang里面可以很清晰地知道哪个函数返回了错误。在函数里面,我们可以在函数的返回值类型里面加一个error,这就代表这个函数可能会返回错误。在函数实现的时候,如果要return,那么就需要同时return两个值。如果出现错误,可以return nil,errors.new(“not found”)去创建,如果没有出现错误那么就返回原本的结构。
例如:func findUser(users []user, name string)(v* user, err error){
for _, u:= range users{
if u.name == name{
return &u,nil
}
}
return nil,errors.new(“not found”)
在调用返回错的函数的时候,接收需要写两个变量,比如u,err。调用完之后要先去判断err是否存在 ,如果err存在的话需要去做一些处理,比如打印一直退出或者返回函数。只有没有err的时候才能够去取真正的返回值fmt.Println(u.name)否则的话会出现空值的错误
字符串操作:
在标准库的strings包里有非常多的字符串函数。比如contains判断一个字符串里面是否包含另一个字符串,count字符串计数,index查找某个字符串的位置,join连接多个字符串,repeat重复多个字符串,还可以用len这个函数去获取字符串的长度。注意,一个中文可能对应多个字符 字符串格式化:在标准库的包里有非常多字符串格式化相关的方法。最常用的就是fmt.Println()打印多个变量并且换行。fmt.Printf()这个函数非常类似c语言里面的printf函数,不同的是在golang里面,可以轻松地使用百分号%v来打印任意类型的变量,而不需要数字用%d,字符用%s。如果用%v可以打印出值,%+v可以打印出字段和值,%#v可以打印出整个结构体的构造名称、字段和值,%.2f则可以打印出一个保留两位小数的浮点数。
json操作:
golang里面的json操作非常简单。对于一个已有的结构体,我们什么都不需要做。只要保证每个字段的第一个字母是大写,即在golang里面的公开字段。那么这个结构体就可以用json.Marshal()去数列化,数列化之后会蜕变成一个buf数组,可以简单理解为字符串。不过打印是需要加一个string(buf)才能强制类型转换才能打印出字符串,否则会打印出16进制的编码。