这是我参与「第三届青训营-后端场」笔记创作活动的的第1篇笔记
第一次接触Go语言,准备这两天快速上手,快速上手一门语言应该速度过一遍大致的语法与数据结构,在windows上下载了GoLand,在ubuntu上配置了vscode,接下来看一看相关小项目如何写。
基础语法
这里主要参考了上课的PPT与Go语言圣经
基础结构
与java一样,有package的概念,通过import()导入,不过包名都是字符串格式,导入的包都在自己的源码头部做了package声明,不同路径相同包名导入需要重命名(也可简化冗长的包名),还有匿名导入,go get下载包等特性,等以后用到再详细看。
变量与函数
变量
由表达式自行判断类型,有整型(int8/32/64)、浮点、字符串(string)、甚至还有复数(可见google野心,部署科学计算领域?),类型转换应该还有一些坑,留给以后慢慢踩了
var 变量名字 类型 = 表达式
:=可做简短声明
函数
函数名、形式参数列表、返回值列表(可省略)以及函数体。个人感觉有点像python,但是可以多个返回值,这个还是第一次见,感觉对err判断很友好
func main() {}
复合数据类型
数组:
var a [3]int,初始值为0
r := [...]int{99: -1}(100个元素前99个为0,第100个为-1)
可以用 == 比较,为真时类型长度都一样
可用指针
切片(slice):
一般写作[]T,有append函数,panic扩容,不能==比较
估计多线程会有一系列问题,以后慢慢看
哈希表(map):
可写为map[K]V,key必须是支持==比较运算符的数据类型
make函数创建:ages := make(map[string]int)
或者
ages := map[string]int{
"alice": 31,//可省略,即空map
}
通过下标形式访问 ages["alice"] = 32//失败返回0
不能对元素取址操作
_ = &ages["bob"] // compile error: cannot take address of map element
delete函数删除delete(ages, "alice")
遍历:
for name, age := range ages {
fmt.Printf("%s\t%d\n", name, age)
}
结构体(struct):
type Employee struct {}
可以指针
可以==比较
可以声明成员类型,而不写其名字,叫匿名成员,粗略过一遍,这部分以后用到了再仔细看
JSON:
原生的Go语言对json序列化做了根本上的支持,基本类型可简单转化为JSON,字符串到字符串或值的映射
HTML模板:
通过写模板来规范输出,以后用到了再仔细看
方法
在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 可以基于指针避免大对象拷贝或者更新变量。 这部分目前用得太少了,感觉概念还是有点新的,日后加强
接口
为了实现多态 或声明类型,或组合其他接口,或完成内嵌,如下:
type ReadWriter interface {
Reader
Writer
}
第一篇笔记暂时写到这里,语言的学习还要伴随着大量的练习,顺便感慨一下字节给自己的掘金平台用这种方式引流哈哈~不过有一说一,这个写文章的编辑器用着挺顺手的。