这是我参与「第五届青训营」伴学笔记创作活动的第2天
前言
接续入门P1,继续了解熟悉Go语言的基础内容。
Go语言入门
基础语法
函数
函数是很多语言所需要了解和掌握的,虽然在日常编码中有一些常用函数,但有一些神奇操作需要自行查找手册,相比于手写结构,内置的函数性能更佳。
func function_name([parameter list]) [return_types] {
函数体
}
在使用函数前,需要了解其构成:
- func:函数由func开始声明
- function_name:函数名称,参数列表和返回值类型构成函数签名
- parameter list:参数列表,与众多语言相似
- return_types:返回类型(如无返回值可省略)
- 函数体:函数定义的代码块
指针
在学习C的指针后,深感无力,但是Go中的指针显然更加友好。以下是声明格式:
var var_name *var-type
func main() {
var a int = 20 //声明实际变量
var p *int //声明指针变量
p = &a //将指针指向实际变量地址
}
以上为指针的创建,对指针变量的定义和赋值,便可以访问指针变量指向地址的值。
fmt.Printf("%x\n", &a) //输出为20818a220
fmt.Printf("%x\n", p) //输出为20818a220
fmt.Printf("%d\n", *p) //输出为20
如果指针被定义但没赋值,其值为nil,也就是常说的空指针。
结构体及方法
结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,其构成如下:
type struct_variable_type struct {
member definition
member definition
...
member definition
}
结构体定义后,可以进行变量声明:
variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
在创建结构体后,如果想访问成员,可以使用以下语句:
结构体.成员名"
结构体同样可以定义指针,其格式类似于指针变量:
var struct_pointer *Books
查看结构体变量地址可以使用&操作符,访问结构体成员可以使用.操作符
结构体方法
定义结构体
type user struct {
name string
password string
}
声明一个密码匹配检测方法
func (u user) checkPassword(password string) bool {
return u.password == password
}
声明一个重置密码方法,使用指针可以在原结构体基础上进行值变换
func (u *user) restPassword(password string) {
u.password = password
}
方法调用
func main() {
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) //true
}
错误处理
Go语言中的错误处理,可以调用errors包,或使用内置的错误接口,接口定义为:
type error interface {
Error() string
}
并发
在Go语言中,可以通过go关键字开启goroutine,其格式如下:
go 函数名(参数列表)
同一个程序中的所有goroutine共享地址空间,所以多个goroutine执行结果并没有固定顺序:
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
以上代码执行所输出的结果没有固定格式,hello和world会轮流输出,但没有次序。
参考
- 字节课程-Go语言原理与实践
- 菜鸟教程-Go语言
- Wiki-Go社区