Go语言上手 | 青训营笔记

91 阅读7分钟

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

一.本堂课重点内容

  • Go语言基本介绍
  • 使用Go语言的公司
  • Go语言环境的安装
  • Go语言快速入门(基础语法)

二.详细知识点介绍

1.Go语言基本介绍

什么是Go语言?Go语言是一门拥有高性能、高并发特点的编程语言。Go语言的语法简单,并且学习曲线较平缓,很容易上手。Go语言拥有丰富的标准库,完善的工具链,静态链接,支持快速编译,跨平台,拥有自己独特的垃圾回收机制。

2.使用Go语言的公司

Go语言的性能毋庸置疑,故惹得许多公司争先使用,像字节跳动,腾讯,美团,百度等等大公司,都使用Go语言来完成自己的一些业务,提高自己的业务水平与效率。

3.Go语言开发环境的安装

第一步,可以到Golang的官网直接点击download下载,然后根据提示就可以安装Golang。第二步,配置开发Golang的编辑器或者IDE。go的开发环境可以选择VSCode或者Golang,这是目前使用最多和最广泛的编辑器和IDE。

4.Go语言快速入门(基础语法)

  • Hello World
package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello,world!")
}

Hello World是每个程序员初始新语言时对世界的一种呐喊

第一行package main代表这个文件属于main包的一部分,main包就是程序的入口包

第三行中导入了标准库的FMT包,这个包主要用来往屏幕输入输出字符串,格式化字符串

import下面是main函数,main函数里面调用了fmt.Println输出了"hello,world"。

  • 变量

go语言是一门强类型语言,每一个变量都有属于自己的类型,常见的类型包括字符串,整树,浮点型,布尔型等。

变量声明有两种方式,第一种如下:

var a = "int"
var d = true
var name string = " "

同时一行也可声明多个变量

var a, c int = 1 , 2

第二种方法(常用)如下:

f := "Byte"

字符串类型也可直接通过加号进行拼接,例如:

var a = "hello"
s := a + "world"

也可将var替换成const来声明常量,在go语言中常量没有确定的类型,通过代码上下文来确定类型

const s string = "constant"
const a = 50000
  • if else
package main

import "fmt"

func main(){

        if 7 % 2 ==0 {
              fmt.Println("7 is even")
        } else{
              fmt.Println("7 is odd")
        }
        if 8 % 4 == 0 {
               fmt.Println("8 is divisible by 4")
        }
        if num := 9; num < 0 {
               fmt.Println(num, "is negative")
        } else if num< 10 {
               fmt.Println(num, "has 1 digit")
        } else {
               fmt.Println(num, "has multiple digits")
        }
}

Go语言中if-else的用法与其他语言一样,但不同的是if的判断式不需要用括号,if后面要接大括号,且if中的语句不能跟if在同一行

  • 循环
package main

import "fmt"

func main(){

        i:= 1
        for {
              fmt.Println("loop")
              break
        }
        for j := 7; j < 9; j++ {
              fmt.Println(j)
        }

        for n := 0; n < 5; n++ {
              if n%2 == 0 {
                    continue
              }
              fmt.Println(n)
        for i <= 3 {
              fmt.Println(i)
              i = i + 1
        }
}

go语言中没有while,do while循环,只有唯一的for循环,最简单的for循环就是后面什么都没有写,代表死循环,循环过程中可以用break退出,也可使用经典的C循环,在循环里可以使用break或者continue来跳出或者继续循环

  • switch

微信图片_20230116104356.jpg

go语言中switch的用法与其他语言一样,但不同的是在其它语言中,若分支中未加break,则会一直向下遍历所有分支,而go语言中却不需要break。go语言中switch的功能更加强大,可以使用任意的变量类型,甚至可以替代if-else,go语言中的switch后可以不加任何变量,然后可以在case中写条件分支,这样比使用多个if-else的代码逻辑更加清晰。

  • 数组

微信图片_20230116104400.jpg

数组具有固定长度,使用也与其他语言类似,在实际开发中用的不多,可看上面图进行理解

  • 切片

微信图片_20230116104404.jpg

切片可以任意改变长度,然后也有更多丰富的操作,比如说我们可以用make来创建一个切片,可以像数组一样去取值,用append去追加数据。注意append的用法的话,必须把append的结果赋值为原数组。

  • map

image (5).png

map在其他语言中叫做哈希,它依然是拥有键值对,上图中它的键key是string类型,它的值valiue是int类型,可以从里面去存储或者取出键值对,也可以通过delete删除键值对。go语言中的map是完全无序的,遍历时不会按照插入时的顺序,也不会按照字母表大小顺序。

  • range

image (6).png

对于一个map我们可以使用range来快速遍历,这样能使代码更加简洁。range遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值,如果我们不需要索引的话可以使用下划线忽略掉。

  • 函数

image (7).png

go语言中得函数返回类型是后置的,其原生可以返回多个值。但在实际开发中一般返回两个值,第一个是实际需要的值,第二个则是错误信息。

  • 指针

image (8).png

go语言中也支持指针,指针得主要用途就是对于传入参数进行修改。调用时会加一个&符号

  • 结构体

image (9).png

go语言中的结构体类似于java中的对象,用结构体的名称去初始化一个结构体变量,其初始化时可以使用键值对,这样可以只对结构体中的一部分字段进行初始化,也可直接用值进行初始化。结构体中支持指针,这样可以实现对结构体的修改。

  • 结构体函数

image (10).png

go语言中可以在结构体中定义一些方法,类似于java中的类成员函数。结构体方法就是把第一个参数加上括号写到函数名前面。定义结构体方法有两种,一种是带指针的,另一种是不带指针的,带指针的可以对结构体进行修改,不带指针实际上就是一个拷贝。

  • 错误处理

image (11).png

在go语言中一般使用一个单独的值来返回错误信息。与java处理异常的方式不同,go语言中能够很清晰的知道哪个函数返回了错误,并且可以用简单的if-else进行解决。在函数里面,我们一般在返回类型后加一个error,代表这个函数可能会发生错误,若其发生错误,则返回nil和一个error,若没有发生错误,则返回原本结果和nil。

  • 标准库

go语言的标准库中有对字符串进行操作,字符串格式化,JSON处理,时间处理,数字解析和进程解析等等,需要我们通过实际开发逐步对其进行熟练使用。

三.Go语言实践

在字节内部课中,老师通过猜谜游戏,在线词典与SOCKS5代理三个项目,让我们体会到了go语言的用法,以及让我们对go语言的基础语法有一个更加深刻的印象,对我们的学习很有帮助。

四.课后个人总结

go语言是一门具有自己特点的编程语言,但其思想与用法跟其他编程语言大同小异,在看课的过程中老师讲解的让我有点跟不住,但是通过课后自己的一系列总结可以加深自己对今日学习的回顾,总的来说,这才第一天,读万卷书,行万里路,最难的便是坚持,我相信只要有坚持的心,就能把东西学好。

五.引用

字节内部课-Go语言上手-基本语法