这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
介绍Go语言
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
简而言之:Go语言是一种具有简单、高效、安全、静态链接、跨平台等多种功能的编程语言。
因为语言本身非常好用,所以目前许多企业使用Go作为后端开发语言,其中就包括字节跳动。
Go语言的IDE
第一个是微软的Visual Studio Code ,第二个是Jetbrains全家桶中的GoLand
VSCode免费,GoLand需要付费,但是可以通过学生认证来使用Jetbrains
Hello World
package main
import (
"fmt"
)
func main(){
fmt.Println("Hello World")
}
Go的同样是用main函数作为入口
变量
与我所熟知的大多数语言不同,Go的类型是后置的
var a string = "uuu"
var b int = 55641
var c = true
d := 1 + 1
这些都是合法的Go变量声明,而且可以看出,Go支持类型推断
流程控制
Go支持if;else;else if;switch语句
if else
if 9 % 2 == 1:
print("odd")
else:
print("even")
switch
switch语句和C中的非常相近,不过有两个差别
- Go中的switch case,在每个case中,break是隐式存在的
- Go中的switch case,可以在case中,使用fallthrough关键字继续执行下一条case中的内容
循环
Go中的循环只有for
死循环:
for{
//code here
}
定义C-style loop
for initialization; condition; expression{
statement
}
在这段循环中,initialization; condition; expression都是可省略的
数组
和C#,Java,C/C++中很像,数组的 长度是固定且不可改变的 ,且 储存的类型是一致的,也就是说,当在定义一个array时,它的长度就已经确定了。
var arr [5]int
int arr[5];
int[] arr = new int[5];
int[] arr = new int[5];
切片
切片相较于数组,他的长度并不固定,也就是说我们可以对其进行追加,删除等 切片使用make初始化,即
s := make([]type,length)
Go同样支持类似Python的切片操作,如
s := make([]int,5)
fmt.Println(s[1:3])
fmt.Println(s[1:])
fmt.Println(s[:3])
但Go不支持Python中的负数索引
map
map在Java中,可能被称为HashMap
Go中,map的定义也是需要用到make
//m := make(map[keytype]valuetype)
//如
m := make(map[string]int)
//存取值时,可以使用m[key] = value
//如
m["a"] = 1
需要注意的是,Go中的Map是无序的
range
对于一个 slice 或者一个 map 的话,使用 range 来进行快速遍历 当 range 遍历的时候,对于数组会返回两个值,分别是索引和值 对于 map ,返回的两个值分别是 key 和 value
函数与指针
在Go中,函数的基本构成是
func funcName(parameter) returnValue{
}
像C一样,Go也有指针,存储着内存地址
i, j := 42, 2701
p := &i
*p = 21
p = &j
*p = *p / 37
但与C不同的是,Go没有指针运算
结构体
Go中结构体的定义格式为
type structName struct {
}
样例
type Vertex struct {
X int
Y int
}
像C一样,结构体同样可以在传参时传入指针
一些想法
- Go语言基础时,很容易上手,因为本人用python最多,所以需要适应一段时间去适应。