Go语言入门指南:常用语法和常用特性解析(三) | 青训营

69 阅读4分钟

在学习完Go语言相关运算符和流程控制,以及简单的函数定义后,今天我学习了Go函数详解以及数组,切片,映像和面向对象

函数

  1. Go语言中是不允许函数重载的,函数重载会出现报错
  2. Go语言的函数中支持可变参数
  3. Go语言中基本数据类型和数组都默认是值传递的,在函数中修改,不会更改main函数中的值
  4. 以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量,从效果来看类似引用传递
  5. 函数也可以作为一种变量类型

函数中包的引入 当我们需要使用包下的函数时,我们应该要先导入函数对应的包,当我们想定义一个同名的函数时,在同一个文件中,我们不能够定义相同名字的函数,此时就可以用包来区分

init函数

初始化函数,可以进行一些初始化操作

匿名函数

匿名函数最常用的方式是:定义匿名函数时就直接使用,且只使用一次

闭包

闭包就是函数和它相关引用环境的组合

defer关键字

在创建函数时,我们常常需要创建资源,为了及时释放资源,可以用defer关键字

##数组

###数组定义格式为:

var 数组名 [数组大小]数据类型

###数组的遍历

1.普通for循环

2.键值循环 即利用 for range,for range结构是Go语言特有的一种的迭代结构,在许多情况下都非常有用。

for range 可以遍历数组、切片、字符串、map 及通道,for range 语法上类似于其它语言中的 foreach 语句,一般形式为:

for a, b := range coll {     ... }

coll为数组,a和b是自定义用来接受for range循环后的值的变量

若是不想接收,可以用下划线来忽略。

###数组的初始化方式

数组的初始化方式有四种

`package main import "fmt" func main(){

        //第一种:

        var arr1 [3]int = [3]int{3,6,9}

        fmt.Println(arr1)

        //第二种:

        var arr2 = [3]int{1,4,7}

        fmt.Println(arr2)

        //第三种:

        var arr3 = [...]int{4,5,6,7}

        fmt.Println(arr3)

        //第四种:

        var arr4 = [...]int{2:66,0:33,1:99,3:88}

        fmt.Println(arr4)

} `

二维数组与其类似

切片

1.切片(slice)是golang中一种特有的数据类型

2.数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在 Go 语言的代码里并不是特别常见。相对的切片却是随处可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷。

3.切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。

4.代码: 切片的语法: var 切片名 []类型 = 数组的一个片段引用

映射

1.映射(map),  Go语言中内置的一种类型,它将键值对相关联,我们可以通过键  key来获取对应的值  value

2.基本语法 var map变量名 map[keytype]valuetype

PS:key、value的类型:bool、数字、string、指针、channel 、还可以是只包含前面几个类型的接口、结构体、数组

PS:key通常为int 、string类型,value通常为数字(整数、浮点数)、string、map、结构体

PS:key:slice、map、function不可以

3.代码:

map的特点:

  1. map集合在使用前一定要make
  2. map的key-value是无序的
  3. key是不可以重复的,如果遇到重复,后一个value会替换前一个value
  4. value可以重复的

面向对象

Golang语言面向对象编程说明:

(1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。

(2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Gelang是基于struct来实现OOP特性的。

(3)Golang面向对象编程非常简洁,去掉了传统OOP语言的方法重载、构造函数和析构函数、隐藏的this指针等等

(4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends 关键字,继承是通过匿名字段来实现。