-
Go 语言函数式编程
本文主要介绍 Go 语言的另一大编程特性——函数式编程。函数式编程的基础特点为: 函数是一等公民,即函数可以做为变量。 纯函数,即函数内的操作不可影响到函数外。 Go 语言的函数式编程无需遵循第二点,这一特性为 Go 语言的函数式编程带来了更大的灵活性。 1. 编程示例 接下来我们来分别展示用函数式编程和普通编程方式来实现一个累加器,即输出 1+2+3+…+100 的值。 普通方式实现: 代码块 1 func main() { 2 a := 0 3 …
-
Go 语言中的 nil
nil 是 Go 语言中内置的一个标识符,有人会把它当作其它语言中的NULL,这个是不准确的。本文就来介绍一下 Go 语言中的 nil 的特点。 1. nil 是特殊的零值 在 Go 语言中,任何一个变量在声明之后会自动被赋予一个零值。数值类型的变量零值为0,字符串为””,而指针、切片、map、通道、函数和接口的零值就是nil。 代码示例 代码块 1 package main 2 3 import ( 4 “fmt” 5 ) 6 7 …
-
Go 语言类型的内嵌
在 Go 语言中的类型是可以直接内嵌到结构体中的,可以看作是一个没有属性名的属性。同时接口中也可以内嵌接口,并且只能内嵌接口。本文就来讲解以下 Go 语言如何使用内嵌类型。 1. 结构体内嵌类型 结构体中内嵌类型在开发中用的并不多,这只是一个延伸特性。意味着结构体在定义属性字段的时候可以只写类型,不写属性名,但是一个类型只能写一个,不然结构体会无法识别你调用的时候使用的是哪个字段,这种只写类型不写属性名的属性被称为匿名字段。 代码示例: 代码块 1 package main 2 …
-
Go 语言中的接口
在所有编程语言中,接口都是一些方法的集合,通常都是”类”们都需要实现的一些公共方法。使这些”类”在使用过程中多了一层抽象。在使用接口时无需在意这些方法是如何实现的,只需在意这个接口中的方法本身。Go 语言提倡面向接口编程,一来增强代码的可读性,二来可以使代码的模块之间的关系变得更加清晰、边界更加明显。本文就来介绍一下 Go 语言中的接口。 1. 接口定义 在 Go 语言中,接口也是一个数据类型,该类型使用结构 interface{..…
-
Go 语言中的结构体和“面向对象”
本文主要来讲解一下 Go 语言的结构体数据类型,以及 Go 语言中的”面向对象”,为什么要加双引号呢?因为 Go 语言中没有明确的面向对象的概念,当然也没有明确的面向过程的概念。面向哪一方面编程完全取决于你如何使用,如果你想要面向对象编程,Go 语言中提供了相对应的解决方案来模拟面向对象。 1. 结构体类型 想要模拟面向对象就首先要了解一下 Go 语言中的结构体类型。当你需要两个以上的基本数据类型或自定义类型来声明定义函数的时候,你就可以使用结构体。结构体变…
-
Go 语言拓展以有类型
在开发中,仅仅使用 Go 语言自带的变量是无法满足我们的业务需求的,就算勉强能满足,对我们整个项目代码后期的维护和其可读性,都会带来很大的不便。所以几乎所有语言都支持自定义数据类型,用于拓展已有的数据类型来适应日新月异的开发场景。在 Go 语言中可以使用 type 关键字自定义数据类型。 1. 自定义复杂类型 我们可以使用type Name Type去自定义一个全新的数据类型。这个类型的变量就使用Name来声明。通常type用于将一个复杂的数据类型定义为一个全新的数据类型,便于后续…
-
Go 语言中的 range
在线程不安全的 map 中我们学习了 map 的遍历,里面使用了一个叫 range 的关键字来对 map 进行遍历操作。当时还提到了切片和数组都可以使用这个方法遍历。本文就来详细学习一下 range 关键字的用法。 Tips:本文提及的 map 均是线程不安全的 map。线程安全的 map 及其遍历方法参照 Go 语言中的map 一文。 1. 基本用法 range 可以用来遍历的对象有数组、切片、map、字符串以及通道。遍历的对象不同,range 的返回值也会有所不同。遍历数组、切…
-
Go 语言中的 Map
本文介绍一种特殊的数据结构。它是一种元素对的无序集合,每一个索引(key)对应一个值(value),这种数据结构在 Go 语言中被称之为 map。map 是一种能够通过索引(key)迅速找到值(value)的数据结构,所以也被称为字典。在 Go 语言中因为线程安全问题,一共实现了两种类型的 map,接下来我们每种都了解一下。 Tips:线程的知识会在Go语言的多线程中讲解。 1. 无锁的map 这种类型的 map 是线程不安全的 map,多个线程同时访问这个类型的 map 的同一个…
-
Go 语言中的切片
本位主要介绍一下 Go 语言中可变长度的”数组”——切片(slice)。数组有数组的用处,但是其不可变长度的特性,注定了在大多场景下不是很受欢迎。在大多数场景下我们都会选择更加灵活的切片。 1. 切片的创建 切片的声明方式和数组类似,写法上看就是声明一个没有长度的数组:var 切片名 []切片类型。其中切片类型可以是切片本身,也就是切片的切片,就构成了多维的切片。 切片在使用之前必须要初始化,它没有零值。声明后它的值是 nil,这是因为它的底层实现是一个指向…
-
Go 语言中的数组
数组是一个可以存放相同数据类型数据的定长序列。由于数组是定长的,在使用场景并不丰富,所以在 Go 语言中通常使用的是切片(Slice)。想要使用切片,就先要了解数组,所以在本文先介绍 Go 语言中数组的使用。 1. 数组的声明 数组的声明形式形如var 数组名 [数组长度]数组类型,其中数组类型可以是数组本身,也就是数组类型的数组,这样就构成了多维数组。和变量的声明相同,数组在声明时会初始化变量类型的零值。 代码示例 代码块 1 package main 2 3 import …