Go语言基础语法 | 青训营

121 阅读4分钟

Go语言基础语法

一.Go的特点

1.高性能、高并发

2.静态链接

3.快速编译

4.跨平台

5.垃圾回收

二.基础语法

1. 输出 hello world

package main // 打包 import( // 导包 "fmt" ) func main(){ fmt.Println("hello world") // 输出 hello world }

2.变量

在 Go 中, 声明一个变量但不使用它时,Go会抛出错误

变量被声明后系统会自动赋值初始化,int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil

变量名使用驼峰命名法,需要被外部包使用的变量名应该将首个单词字母大写 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。

变量可以通过变量名访问。

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字:

2.1

2.1.1 自动推导

var a="zs" f=3.2

2.1.2 类型声明

var b int=1

2.2 常量

2.2.1 自动推导

const a=2

2.2.2 类型声明

const s string="hello"

3.if else

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。

image.pngif 判断条件{ }else if 判断条件{ }else{ }

4. 循环

Snipaste_2023-07-25_18-02-19.png

4.1 死循环

for{ }

4.2

for i:=1; i<5; i++{ }

5. switch

不用加break

5.1

switch a{ case 条件1: default: }

5.2

a:=2 switch { case 条件1: default: }

6. 数组

6.1 一维数组

var a[5] int b:=[5]int{1,2,3,4,5}

6.2 二维数组

var twoD [2][3] int

7.切片 (长度可变)

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

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

7.1声明

s:=make([]string,3) good:=[]string{"o"}

7.2拷贝

c:=make([]string,len(s)) copy(c,s)

7.3添加元素

s=append(s,"d")

7.4 获取元素

s[2:5] // 下标为2 , 3 ,4 的元素

s[:5] // 下标为0 到4 的元素

s[2:] // 下标为2到最后一个 元素

8.map

Map 是一种无序的键值对的集合。

Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。

在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。

Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。

8.1声明

m:=make(map[string]int) // key为string ,value为int

8.2添加键值对

m["one"]=1 m1:=map[string]int{"one":1}

8.3 获取数据

r,ok:=m["one"] // ok 表示是否有这个键值对,r是value

9.range

nums:=[]int{2,3,4} for i,num:=range nums{ }

10.defer

  • 推迟函数,直到包含defer的语句完成时调用
  • 多个defer语句按照定义顺序逆序执行

11.panic

内置 panic()函数可以停止 Go 程序中的正常控制流。 当你使用 panic 调用时,任何延迟的函数调用都将正常运行。

12.recover

可以使得程序崩溃后继续运行

13.切片slice

  • 长度可变的数组,其优点在于是一个引用,不需要额外的内存,不能用指针指向切片
  • len() 当前长度
  • cap() 最大容量 声明格式
go
复制代码
go
复制代码
var arr2 []int
初始化
var arr2 []int = arr1[3:2]
arr2 := []int{1,2,3}

切片结构体包含三个部分
指向数组的指针,当前切片长度,切片容量
复制代码

用make创建切片

go
复制代码
js
复制代码
var slice1 []type = make([]type, len)
s := make([]string, 3)
还可以指定cap
s := make([]string, 35)
复制代码

make和new的区别

  • new (T) 为每个新的类型 T 分配一片内存,初始化为 0 并且返回类型为 * T 的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}。
  • make(T) 返回一个类型为 T 的初始值,它只适用于 3 种内建的引用类型:切片、map 和 channel。

14.Map

可以使用range遍历

go
复制代码
js
复制代码
var m map[string]int
// 值是否存在,存在返回true
_, ok := m[key1]
复制代码

15.其它内容

os.Args 变量包含传递给程序的每个命令行参数

16.个人总结

我觉得go有js的一些特点,比如变量的命名可以使用var来声明,对于有其他语言基础的学习者,学习起来还是比较快的