Go语言简介
Go是于2007年由Google发布的一种编程语言,它有着类似C语言的语法和类型系统,同时也有着内存安全性和并发性的特点。Go语言旨在提供高效的编程体验,因此它很适合用于编写大型项目和高性能系统。
Ubuntu下的Go语言环境配置
首先,我们要从Go官方网站获取包,但是由于国内无法访问,可以通过镜像网站去下载:go语言中文下载网。
右键复制连接,使用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 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。