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 的情况在执行另外的语句。
if 判断条件{ }else if 判断条件{ }else{ }
4. 循环
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, 3, 5)
复制代码
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来声明,对于有其他语言基础的学习者,学习起来还是比较快的