Day1 初学Go语言 | 青训营笔记

106 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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中的非常相近,不过有两个差别

  1. Go中的switch case,在每个case中,break是隐式存在的
  2. 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最多,所以需要适应一段时间去适应。