后端Golang | 青训营笔记

70 阅读5分钟

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

1. Go语言开发环境的搭建

1.1 安装Golang

在官网 go.dev 或者国内镜像网站 goproxy.cn (较快)下载windows的安装程序,直接执行安装就可以。

在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录 windows平台是在 %USERPROFILE%/go下 ,Linux平台是在 $HOME/go 下。

1.2 配置开发环境

对于Golang的开发,我们可以使用开源的Vs Code 或者 可以使用可以免费使用30天的GoLand。使用Vs Code作为开发环境的话,需要下载对应的go插件。

或者我们也可以使用云开发环境 hi-hi.cn/gitpod ,使用方法为此链接后跟上 # + 项目地址,例如:

http://hi-hi.cn/gitpod/#github.com/wangkechun/go-by-example

2. 基础语法

在 Go 中,基础的数据类型有:数字类型、字符串类型、布尔型

2.1 Hello World

作为刚接触一门语言,首先要写的第一个程序即是Hello World,代码如下:

package main

import "fmt"

function main() {
    fmt.Println("Hello World!")
}

作为入门的第一个程序,我们要看Go程序的结构是什么样的

// 包声明 , package main 表示一个可以独立执行的程序,这条语句必须存在于源文件非注释的第一行
package main

// 包引入,在项目中我们需要使用到其他包下的内容时,需要在此处进行引用,此外当需要引入多个包时,可以使用大括号进行包裹,如:
// import {
//  "包名"
//}
import "fmt"

// function 定义函数,main函数是程序开始执行么函数
function main() {
    // 具体代码 , 此处是使用了fmt包下的Println()函数,其作用是打印填入的参数
    fmt.Println("Hello World!")
}

执行这段程序,我们可以在控制台发现 Hello World! 这句话。

2.2 变量

在Go中声明变量时,可以显示提供类型,也可以不显示提供类型,Go语言会自动进行类型推导。

变量,常量声明方式: 使用 var 来声明变量,eg:

var a  = "value"
var b int = 2
var c
var d, e, f
g := 9

其中 := 用于声明变量较为简洁

使用 const 来声明常量,eg:

const a  = "value"
const b int = 2

2.3 if-else

与C语言和Java语言不同,Go语言进行判断时无需对条件加上括号。

使用方式参考以下代码:

// 第一种
if 1/2  == 0{
}else{
}

//第二种
if temp := 2 ; temp < 0{
}else if temp < 3 {
}else{
}

2.4 循环

Go语言不存在while循环。只有for循环。

使用方式参考以下代码:

// 第一种,死循环
for{
}

// 第二种,C语音类似写法
for temp := 0 ; temp < 10 ; temp++{
}

// 第三种,只写条件语句
for temp < 10  {
}

2.5 switch

Go语言除了拥有C语音 switch 的作用外,还可以另一种方式,另外,Go使用switch时,无需添加break,当匹配到条件时不会执行后续case的代码。

使用方式参考以下代码:

// 第一种
t := 4
switch (t){
case 1: // your code
case 4: //your code
default: //your code
}

//第二种
switch{
case t< 0://your code
default://yiur code
}

2.6 数组

Go定义数组的方式为:

var a [10]int

b := [2]int{1,2}

var c [2][2]int

操作方式与C语言类似,也可以使用len()来获取数组长度

2.7 切片

与Python类似 可使用 [start,end]进行对数组的切片,范围为start开始到end-1位置的内容。

使用方式:

 
// 可使用make()来完成创建一个指定大小和类型的数组
s := make([]string , 5)

// 可使用apoend函数对数组进行添加,添加后数组长度会加一
s = append(s, "1")

a := s[2:5]
b := s[2:]
c := s[:3]

2.8 map

创建 :

// 使用make()进行map的创建,string为键类型,int为值类型
map := make(map[string]int)


map1 := map[string]int {"mm":1}

添加 :

map["mm"] = 0

获取值 :

// 键值获取
a , ok = map["mm"]



2.9 range

使用range可完成对数组的遍历以及map的遍历

a := []int {1, 2, 3}

// i为索引,num为值
for i ,num := range a{

}


m := map[string]int{"mm":2}

// k为键,v为值
for k, v := range m{

}

// 只获取键
for k := range m{

}

2.10 函数

使用func关键字进行函数声明。


//使用多个参数或者返回类型时,可以使用括号进行包裹,go语言支持多返回值
func 函数名(参数名1 参数类型1, ……) (返回类型1,… ){
}

2.12 指针

当调用可以修改入参的值得函数时传递的是变量的话,变量本身不会改变,当传递的是变量指针的话,变量本身会改变。 例如

package main 

import "fmt"

func add(a int) {
a+=1
}

func addPtr(a *int) {
*a+=1
}

func main {
n:= 2
add(n)
fmt.Println(n) //2
addPtr(&n)
fmt.Println(n) //3
}


2.13 结构体

类似于C的结构体

type name struct {
name string
val int
}

// 可使用.进行获取结构体某个属性的值,也可以修改
a := name{"str",1}
c := a.val
a.val = 2

2.14 结构体方法

// 定义方法的语法格式
func (接受者变量 接受者类型) 方法名(参数列表)  (返回值列表){
}


2.15 错误处理

对于某些方法,返回的值可能会有错误信息,为使流程正确,我们可以使用两个参数用于接受方法返回值,第二个参数为错误信息,之后将其进行判断是否为nil,若为空则继续向下执行,否则直接打印错误信息,并停止向下运行。