这是我参与「第五届青训营 」伴学笔记创作活动的第1天。
正所谓好记性不如烂笔头,我决定将学习到的知识点归纳总结,并以文章的方式记录下来,方便后续复习巩固。
Go语言的特点:
- 高并发、高性能,有媲美C++的性能
- 语法简单,容易上手
- 自带垃圾回收机制
- 可快速编译为可执行程序
- 跨平台,编译后的程序能够在多端运行
- 有丰富的标准库和完善的工具链
通过一个简单的例子,了解Go语言:
示例解读:
- package定义了一个包名
- 通过import导入另一个包,导入的包可以是标准库也可以是第三方库
- 通过func定义一个函数
- 函数名称是main
- 代码块必须写在{}中间,且左括号{必须与func在同一行
- 通过fmt包的Println函数,打印字符串
Go中的数据类型:
- 整数
- 浮点数
- 布尔
- 字符串
- 指针
- 数组
- Slice(切片,可以理解为不定长数组)
- map(类似于部分语言的字典)
- chan(通道)
- struct(类似于部分语言的class)
- interface{} (接口,可以表示为任意类型)
- func (没错,函数也可以作为一种类型,差点给我看懵了)
- 通过type关键字,还可以自定义类型......
输入输出:
通过fmt可以实现输出输出功能,例如:fmt.Println,fmt.Scanf 示例:
fmt.Println("hello, world")fmt.Scanln(&name)
变量的定义和初始化
var name string = "张三"类型可以省name := "张三"name := new(string)- 还有一个make,可用于slice, map和chan
这里我踩到一个坑,那就是作用域,如果变量名称是函数内部,函数外部和循环内部的作用域是不同的,大概可以这样理解
函数外>函数内>for循环内|if语句内
函数外定义的变量,它后面的所有作用域都可以使用,函数内定义的只能在函数内使用,for和if也是一样,只能在自己内部使用。 同时,变量又分公开还是私有,通过变量首字母大小写区分,大写表示公开,其他包内可以调用,小写只能在当前包内调用,函数也是同理。
for循环
在GO中只有for循环,没有while也没有do while,只需要使用for循环,即可实现需要的功能,是不是感觉简单多了,跳过当前循环(continue),结束当前循环(break),也可以通过goto跳出循环
逻辑分支语句:if、switch和select:
通过if和else if或else实现逻辑判断,分支过多的时候,也可以使用switch让代码看起来更清爽,还有一个用于通道的select。
结构体和接口
type User struce {} 定义一个User结构体
type Car interface {} 定义一个Car接口,只要实现了里面的所有方法,就表示实现了该接口
函数:func
在开头的例子中我们就通过func关键字创建了一个函数,在Go语言中,除了跟函数定义类似的叫方法,区别只是在函数名称前面传入了类型,可以是struct,interface甚至是string,int等。 示例:
func Get(id int64) error {}函数func (u *User) Get(id int64) error {}方法
看完后是不是瞬间明白了两者的区别。
细心的朋友可能已经注意到,上面定义的函数中,括号里面有个id int64,表示的是传入一个int64类型的参数,参数的变量名称是id,还有一个细节是括号右边还有一个error,这是一个类型,相信我,接触Go后,你会经常和它见面,现在它是一个返回值,这个函数需要返回一个error类型的值,但我们没有指定变量名称,如果要指定,可以这样做:
func (u *User) Get(id int64) (err error) {}这样就就可以了,变量名err,变量类型error
好记性不如烂笔头,今天就到这里了,我们下次再见!