这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go语言入门
什么是go语言
go语言比较简单,其标准库就已经足够支持我们架设一个后端程序,最基础的库是net/http
go语言有比较完整的工具链,开发体验类似java
go语言编译比较快, 很方便开发者进行调试
go语言类似java一样,能够跨平台
go语言和java,C#一样,拥有gc,让我们能够专注于逻辑,而非内存
go语言的性能比python更加好
基础语法
go项目有且只有一个main包,只有main包里的main函数会作为入口执行 输出输入的基础库是fmt
go的变量与其他编程语言类似, 整数,浮点,布尔,字符串等
变量的声明
var [var nname] (var type) = (value)
[var name] := [var value]
常量把var改成const即可
其他
if 是不需要添加括号
for{} 与 for(;;){}是相等的
switch更加强大,可以是任何东西作为参数 甚至可以不在switch里写参数, 在case内使用条件作为参数,这个功能可以替代if语句
数组与切片
数组的声明var a [length]type
切片是长度可变的数组使用make([]type,length来创建一个默认长度为length的切片
切片类似List,拥有append函数,参考list.add()
append的使用 append是返会一个新的切片(slice),所以需要重新赋值
//声明s
s := make([]string,3)
var s = make([]string,3)
//函数的使用
s=append(s,"d)
取出slice的内容
println(s) //输出全部
println(s[2:5])//输入2到5的内容
println(s[:5])//0到5
println(s[2:])//2到max
map
map的创造
m:= make(map[key]value)
取出元素
r=m["something"] //取出key为something的值
r,hasValue=m["something" //同上,其中hasValue是是否含有这个key的bool
range
range配合for使用,类似foreach没什么好说的
指针
golang的指针,其实就是为了对传入的参数进行修改,类似C#的ref
func add(n *int){ //声明指针变量
*n+=2 //对指针变量赋值的时候需要加一个*号
}
add(&n)//对变量进行取指针操作
使用指针可以避免变量拷贝的开销!!!
结构体
go没有类的概念只有结构体的概念
结构体方法
func[结构体] 方法名字 [方法参数] (返回值){}
func(*user) checkPasswd(passwd string) bool{}
user.checkPasswd(xxx)
错误处理
golang的返回可以是多个参数, 错误是作为参数进行返回的.
结尾添加(err error)即可
检测的时候判断err!=nil即可判断是否有无错误
格式化字符串
字符串的格式化只可以在printf函数中使用 %v: 任意变量 %d 数字 %s 字符串 %.nf 打印长度为n的浮点
json
字符串json只需要 json.Marshal(结构体),而且保证结构体变量都是大写的即可
Marshal得到的是二进制的数据,输出的时候需要转化为string
string(buf)
那么怎么得到小写的呢
type T sturct{
FieldA int `json:field_a`
}
这样输出就会是小写的了
字符串转换
用到的包是strconv
ParseInt("1111",10,64)//内容,进制,精度(64,32)
ParsetFlot("111",64)//内容,精度
Itoa(32)//把32转化为"32"