Go基础 | 青训营笔记

40 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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的人来说,应该都是较为轻松的。

当然这个一周也只是最最基础的部分。一个工程还需要很多知识的沉淀才能完成。