Golang基础篇-快速入门Go语言| 青训营笔记

79 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第1天。

正所谓好记性不如烂笔头,我决定将学习到的知识点归纳总结,并以文章的方式记录下来,方便后续复习巩固。

Go语言的特点:

  1. 高并发、高性能,有媲美C++的性能
  2. 语法简单,容易上手
  3. 自带垃圾回收机制
  4. 可快速编译为可执行程序
  5. 跨平台,编译后的程序能够在多端运行
  6. 有丰富的标准库和完善的工具链

通过一个简单的例子,了解Go语言:

image.png

示例解读:

  1. package定义了一个包名
  2. 通过import导入另一个包,导入的包可以是标准库也可以是第三方库
  3. 通过func定义一个函数
  4. 函数名称是main
  5. 代码块必须写在{}中间,且左括号{必须与func在同一行
  6. 通过fmt包的Println函数,打印字符串

Go中的数据类型:

  1. 整数
  2. 浮点数
  3. 布尔
  4. 字符串
  5. 指针
  6. 数组
  7. Slice(切片,可以理解为不定长数组)
  8. map(类似于部分语言的字典)
  9. chan(通道)
  10. struct(类似于部分语言的class)
  11. interface{} (接口,可以表示为任意类型)
  12. func (没错,函数也可以作为一种类型,差点给我看懵了)
  13. 通过type关键字,还可以自定义类型......

输入输出:

通过fmt可以实现输出输出功能,例如:fmt.Println,fmt.Scanf 示例:

  • fmt.Println("hello, world")
  • fmt.Scanln(&name)

变量的定义和初始化

  1. var name string = "张三" 类型可以省
  2. name := "张三"
  3. name := new(string)
  4. 还有一个make,可用于slice, map和chan

这里我踩到一个坑,那就是作用域,如果变量名称是函数内部,函数外部和循环内部的作用域是不同的,大概可以这样理解

函数外>函数内>for循环内|if语句内

函数外定义的变量,它后面的所有作用域都可以使用,函数内定义的只能在函数内使用,for和if也是一样,只能在自己内部使用。 同时,变量又分公开还是私有,通过变量首字母大小写区分,大写表示公开,其他包内可以调用,小写只能在当前包内调用,函数也是同理。

for循环

在GO中只有for循环,没有while也没有do while,只需要使用for循环,即可实现需要的功能,是不是感觉简单多了,跳过当前循环(continue),结束当前循环(break),也可以通过goto跳出循环

image.png

逻辑分支语句:if、switch和select:

通过if和else if或else实现逻辑判断,分支过多的时候,也可以使用switch让代码看起来更清爽,还有一个用于通道的select。

image.png

结构体和接口

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

好记性不如烂笔头,今天就到这里了,我们下次再见!