Go语言零基础入门 | 青训营笔记

77 阅读4分钟

Go语言简介

Go是于2007年由Google发布的一种编程语言,它有着类似C语言的语法和类型系统,同时也有着内存安全性和并发性的特点。Go语言旨在提供高效的编程体验,因此它很适合用于编写大型项目和高性能系统。

Ubuntu下的Go语言环境配置

首先,我们要从Go官方网站获取包,但是由于国内无法访问,可以通过镜像网站去下载:go语言中文下载网

img

右键复制连接,使用wget命令下载

 wget https://studygolang.com/dl/golang/go1.18.7.linux-amd64.tar.gz

下载完成后,使用tar命令进行解压

 tar -zxvf go1.18.7.linux-amd64.tar.gz

解压完成后,我们需要配置环境变量,配置环境变量的目的是让我们能在任何目录下使用go命令,而不需要跑到go的bin目录下执行。

首先创建一个Go工作目录

 mkdir /home/go/goProject

执行命令打开配置文件配置环境变量

 sudo vim /etc/profile

在文件末尾追加下面几句

 export GOROOT=/home/go/go
 export GOPATH=/home/go/goProject
 export GOPROXY=https://goproxy.cn
 export PATH=$PATH:$GOROOT/bin

完成之后直接wq退出,并source以下

 source /etc/profile

接下来,是由go version命令查看是否成功安装

如果不成功,重新登陆服务器即可

Go基础语法

变量

go语言使用关键字var来声明一个变量,若没有初始化,则默认为零值

 var x int // 声明一个整型  0
 var y string // 声明一个字符型 ""

在给变量赋值时,go可以自动推断类型

 var x = 10 // x为整型
 ​
 // 使用 := 语法定义变量,省略var关键字
 // 注意,如果变量已经被var声明过了,再使用:=会导致编译错误
 y := "world"

函数定义

go语言定义函数格式如下

 func function_name([param] type,[param] type) return_type {
     
 }

go语言函数可以返回多个值

 package main
 ​
 import "fmt"
 ​
 func swap(x, y string) (string, string) {
    return y, x
 }
 ​
 func main() {
    a, b := swap("Google", "Bytedance")
    fmt.Println(a, b) // Bytedance Google
 }

条件语句

使用关键字 if 来执行判断

 // if语句
 if x > 0 {
     fmt.Println("x is positive")
 } else {
     fmt.Println("x is non-positive")
 }

go语言的if在执行判断前 还可以再额外执行一条指令

 // if语句
 if x=x-10; x > 0 {
     fmt.Println("x is positive")
 } else {
     fmt.Println("x is non-positive")
 }

使用 switch 来进行判断

  var grade string = "B"
    var marks int = 90
 ​
    switch marks {
       case 90: grade = "A"
       case 80: grade = "B"
       case 50,60,70 : grade = "C"
       default: grade = "D"  
    }

需要注意的是,go语言的switch不需要加break

循环语句

Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。

和 C 语言的 for 一样:

 for init; condition; post {
     
 }
  • init: 一般为赋值表达式,给控制变量赋初值;
  • condition: 关系表达式或逻辑表达式,循环控制条件;
  • post: 一般为赋值表达式,给控制变量增量或减量。

和 C 的 while 一样:

 for condition { }

数组和切片

数组声明的语法格式如下

 var array_name [size] type

r如果数组长度不确定,可以用 ... 来代替数组长度

 var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

Go 语言切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

你可以声明一个未指定大小的数组来定义切片:

 var identifier []type

切片不需要说明长度。

或使用 make() 函数来创建切片:

 var slice1 []type = make([]type, len)
 ​
 slice1 := make([]type, len,capacity)

可以通过设置下限及上限截取切片

  numbers := []int{0,1,2,3,4,5,6,7,8}  
 ​
    /* 打印原始切片 */
    fmt.Println("numbers ==", numbers)
 ​
    /* 打印子切片从索引1(包含) 到索引4(不包含)*/
    fmt.Println("numbers[1:4] ==", numbers[1:4])
 ​
    /* 默认下限为 0*/
    fmt.Println("numbers[:3] ==", numbers[:3])
 ​
    /* 默认上限为 len(s)*/
    fmt.Println("numbers[4:] ==", numbers[4:])

结构体

go语言的结构体存储了一系列不同类型的数据。

结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

  • Title :标题
  • Author : 作者
  • Subject:学科
  • ID:书籍ID

定义结构体格式:

 type Books struct {
    title string
    author string
    subject string
    book_id int
 }

使用.运算符访问结构体成员

 var book Book
 book.title = "go"

小总结

Go 语言特色

  • 简洁、快速、安全
  • 并行、有趣、开源
  • 内存管理、数组安全、编译迅速

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。