这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容
主要学习golang的基本语法。以及相关的小程序。
二、详细知识点介绍
下面我只讲新的点。
变量
你看go的语法会发现他和你了解过的很多编程语言都有类似之处。
从变量的定义上看,我们使用var关键字声明我们创建变量。就我自己来说,和js很像的格式。
当然你也可以使用:=来省去var,让编译器推断类型。这个符号的使用倒是和rust有点类似。变量的类型是后置的,不同与C与C++的前置int a; int b;,go则是var a int = 10。还有函数的返回值也是后置的。
类
go中没有明确的类的说法,而是采用结构体的模式。其实和c++的结构体效果就有点像了。
struct结构体的定义语法和c系列有些不一样:
type NAME struct {
val1 int
val2 string
}
而类的成员函数的定义方式,则是在函数名前添加一个特殊的参数列表。用于表示他属于哪个类以及传递调用者的方式是怎样的。我们用拷贝类型也有引用类型。
type NAME struct {
val1 int
val2 string
}
func (the_struct_name_in_func NAME) (a int, b int) bool {
return the_struct_name_in_func.val1 == 1 // 这里的调用者是拷贝,无法进行写入,或者写入无意义
}
func (the_struct_name_in_func *NAME) (a int, b int) bool {
the_struct_name_in_func.val1 = 2 // 调用者是引用,可以进行修改
}
错误处理
go的错误处理通过返回值的方式。如果一个函数可能会出现错误,那么他就会在第二个参数返回错误类型。第一个参数是我们的正常的值。
func findUser(users []user, name string) (v *user, err error) {
if have_error() {
return nil, errors.New("not find")
}
return u, nil
}
流程语法
go只有一个循环for。可以使用迭代类型,也可以使用c like。
switch默认带break,无需自己添加,其条件分支语句更加自由,不再是单一的数值类型。甚至可以是条件。if的多重分支可以改成switch更加直观。
break, continue都是和其他语言一致。
子线程
使用go关键字开启一个子线程处理
go process(http_req)
原生支持高并发。
其他
还有defer,context这些特殊的用法,自行查阅,刚开始不太用得上。
三、实践练习例子
这里主要函数数据流的应用。不过初期你也可以c like,直接开缓冲区。这里的缓冲区用的好像都是slice。
go的原生高并发就确定了他适合作为服务器后端语言,所以简单的实现一个多线程的epoll框架其实就可以了解go了。
四、课后个人总结
一开始说一周从0到开发,我是不信的。但是看了看语法,确实十分轻松。对于有学过c的人来说,应该都是较为轻松的。
当然这个一周也只是最最基础的部分。一个工程还需要很多知识的沉淀才能完成。