Go 语言基础语法

70 阅读7分钟

1. 变量****

(1)指定变量类型,声明后若不赋值,使用默认值,int默认值 0,string默认值为空。

(2)根据值自行判断变量

(3)省略var。 :=(声明且赋值)左侧的变量不应该是已经声明过的,否则会报错。

(4)多变量声明。eg:var a, b, c int

2. if else****

(1)单分支,if_{}结构。即使只有一句话也不能把大括号去掉。  

(2)双分支,If_{}else{}结构。

(3)多分支,if_{}else if_{}……else{}结构;else不是必须的;只能有一个执行口。

(4)嵌套分支,

注意:Go的if的条件判断语句 里面允许声明一个变量,但是这个变量的作用域只能在该条件逻辑块内,在其他地方起不了作用。

3. 循环****

(1)for循环,循环条件是返回一个布尔值的表达式;

(2)不加循环条件就是一个死循环;

(3)Go语言中没有while循环;

4. Switch****

(1)流程:先执行表达式得到值,然后与case的表达式进行比较,如果相等就匹配到相应的case的语句块,然后退出switch控制;如果表达式的值没有和任何case的表达是匹配成功的话 则执行default的语句块。

(2)case后的表达式可以有多个,使用“,”间隔。

(3)case语句块不需要写break,因为默认有break。

5. 数组****

数组可以存放多个同一类型数据。数组也是一种数据类型。在Go中数组是值类型。

6. 切片(slice)****

(1)切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。

(2)切片的使用与数组类似,遍历切片、访问切片的元素和求切片长度len(slice)都一样。

(3)切片党的长度是可以变化的,因此切片是一个可以动态变化数组。

(4)切片定义: var 切片名[]类型

7. Map****

Map是key-value数据结构,又称为字段或者关联数组。类似其他编程语言的集合,是编程中经常使用到。

(1)var map 变量名 map[keytype]valuetype。Golang中的map的key可以是很多种类型,如 bool,数字,string,指针,channel,还可以是接口,结构体,数组,通常为int,string。Value的类型与key基本一样,通常为数字,string,map,struct。

8.range****

(1)是go语言一种独有的结构,可以用来遍历访问数组的元素。

(2)语法

for index, value := range array01{

……

}

1)第一个返回值index是数组的下标

2)第二个value是在该下标位置的值

3)他们都是仅在for循环内部可见的局部变量

4)遍历数组元素的时候,如果不想使用下标index,可以直接把下标index标为下划线_

5)Index和value的名称不是固定的,是可以自行指定的

9. 函数****

(1)自定义函数:(类似java方法封装)

func 函数名(形参列表)(返回值类型列表){

执行语句……

return 返回值列表

}

1)形参列表:表示函数的输入;

2)函数中的执行语句:表示为了实现某一功能代码块

3)函数可以有返回值,也可以没有

(2)系统函数:系统中自带的函数,如:fmt等

10. 指针****

(1)获取变量的地址用 “&”。

(2)指针变量存的是一个地址。

(3)获取指针类型所指向的值用“*”。

11. 结构体****

(1)golang也支持面向对象编程,但与传统面向对象编程有区别,并不是纯粹的面向对象语言。比较准确说是支持面向对象编程特性。

(2)golang没有类,go语言的结构体和其他编程语言的class有同等地位。

(3)golang面向对象编程非常简洁,没有传统面向对象语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。

(4)golang仍然有面向对象编程的继承、封装和多态的特征,只是方式和其他语言一样。

(5)golang通过接口关联,耦合性低,很灵活。

12. 结构体方法****

(1)方法声明和调用

Type A struct{

  Num int

}

func (a A) test(){     //表示A结构提有一个方法,方法名为test

    fmt.Println(a.Num)

}

14. 字符串操作****

(1)len():用来统计字符串的长度。

(2)[]rune(T type):将一个字符串转化为切片,用于遍历含有中文的字符

(3)i,err := strconv.Atoi():将一个字符串转化为一个整数,返回值有i和error两个

(4)str := strconv.ItoA() :将一个整数转化为一个字符串

(5)bytes := []byte(str string) :字符串转化为byte切片

(6)str := string([]byte{97,98,99}) :byte切片转换为字符串

(7)str := strconv.FormatInt(i int,base b): 将十进制转化为其他进制(2到32进制)

(8)var judge bool = strings.Contains(BigStr string,littleStr string) :判断一个字符串是否包含另一个字符串

(9)var counts int = strings.Count(s, str string) :返回一个字符串有几个指定的字符串

(10)var judge bool = string.EqualFold(“abc”,“Abc”): 不区分大小写的字符串比较,区分的使用 == 就可以

(11)var index int = strings.Index(s,str string): 寻找字符串第一次出现的位置,没有的话返回-1

(12)var lastIndex int = strings.LastIndex(s,str) :寻找一个字符在字符串中最后一次返回的位置

(13)var str string = strings.Replace(s,oldstr,newstr,n):将一个字符串中的字符串替换成另一个字符串,n表示替换几个,

如果是-1表示替换所有

(14)stringArr string[] = strings.Split(s,str) :将一个字符串按照指的的分隔符分割为一个字符串数组

(15)strings.ToLower(s)、stings.ToUpper(s) :将字符串进行大小写的变化

(16)strings.TrimSpace(s):去掉字符串两边的空格

(17)strings.Trim(s,str): 去掉字符串两边的指定字符串(str包括指定字符串和空格)

(18)strings.TimLeft(s,str) 、strings.TimRight(s,str):去除左右两边指定的字符串,顺便去掉多出的空格

(19)strings.HasPrefix(s,str)、strings.HasSuffix(s,str):判断一个字符串是否是以指定字符串开头或者结尾的

15. 字符串格式化****

(1)%s:输出字符串(string和[]byte)值

(2)%d:输出十进制整数值

(3)%b: 输出整型的二进制表示形式

(4)%#b 输出整型的二进制完整表示形式 

(5)%o 输出整型的八进制表示形式 

(6)%#o 输出整型的八进制完整表示形式

(7)%x 输出整型的十六进制表示形式

(8)%#x 输出整型的十六进制完整表示形式

(9)%X 输出整型的十六进制表示形式(大写)

(10)%#X 输出整型的十六进制完整表示形式(大写)

(11)%v 输出值的本来形式

(12)%+v 输出值的本来形式,如果值为结构体,对结构体字段名和值展开 

(13)%#v 输出Go语法格式的值

(14)%t 输出布尔值 

(15)%T 输出值对应的Go语言类型

(16)%% 输出百分号

(17)%c 输出Unicode码对应的字符 

(18)%U 将Unicode码转换为对应的Unicode码点

(19)%f 输出浮点数

(20)%e 输出数值的科学计数法形式

(21)%E 与%e功能相同

(22)%g 输出紧凑的浮点数

(23)%p 输出指针

(24)%q 格式化字符串,在字符串的两端加上双引号

16. JSON处理****

JSON是目前主流的数据格式。

通常程序在网络传输时会先将数据序列化成json字符串,收到方得到json字符串时,在反序列化恢复成原来的数据类型。