阿振sc
阿振sc
# Go经典入门17:接口(一) ## 什么是接口? 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 `Go` 语言中,接口就是方法签名(`Method Signature`)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。这与面向对象编程(`OOP`)的说法很类似。接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。 例如,`WashingMachine` 是一个含有 `Cleaning()` 和 `Drying()` 两个方法的接口。任何定义了 `Cleaning()` 和 `Drying()` 的类型,都称它实现了 `WashingMachine` 接口。 ## 接口的声明与实现 让我们编写代码,创建一个接口并且实现它。 ```go package main import ( "fmt"...
# Go经典入门16:方法 ## 什么是方法? 方法其实就是一个函数,在 `func` 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。 下面就是创建一个方法的语法。 ```go func (t Type) methodName(parameter list) { } ``` 上面的代码片段创建了一个接收器类型为 `Type` 的方法 `methodName`。 ## 方法示例 让我们来编写一个简单的小程序,它会在结构体类型上创建一个方法并调用它。 ```go package main import ( "fmt"...
# Go经典入门15:结构体 ## 什么是结构体? 结构体是用户定义的类型,表示若干个字段(`Field`)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。 例如,一个职员有 `firstName`、`lastName` 和 `age` 三个属性,而把这些属性组合在一个结构体 `employee` 中就很合理。 ## 结构体的声明 ```go type Employee struct { firstName string lastName string age int } ``` 在上面的代码片段里,声明了一个结构体类型 `Employee`,它有 `firstName`、`lastName`...
# Go 经典入门 14:指针 ## 什么是指针? 指针是一种存储变量内存地址(`Memory Address`)的变量。 指针示意图  如上图所示,变量 `b` 的值为 156,而 `b` 的内存地址为 `0x1040a124`。变量 `a` 存储了 `b` 的地址。我们就称 `a` 指向了 `b`。 ## 指针的声明 指针变量的类型为 `*T`,该指针指向一个 `T` 类型的变量。...
# Go经典入门13:字符串 > 由于和其他语言相比,字符串在 `Go` 语言中有着自己特殊的实现,因此在这里需要被特别提出来。 ## 什么是字符串? `Go` 语言中的字符串是一个字节切片。把内容放在双引号 `""` 之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。 ```go package main import ( "fmt" ) func main() { name := "Hello World" fmt.Println(name) } ``` 上面的程序将会输出...
# Go经典入门12:Maps ## 什么是 map ? `map` 是在 `Go` 中将值(`value`)与键(`key`)关联的内置类型。通过相应的键可以获取到值。 ## 如何创建 map ? 通过向 `make` 函数传入键和值的类型,可以创建 `map`。`make(map[type of key]type of value)` 是创建 `map` 的语法。 ```go personSalary := make(map[string]int) ```...
# Go经典入门11:可变参数函数 ## 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 ## 语法 如果函数最后一个参数被记作 `...T`,这时函数可以接受任意个 `T` 类型参数作为最后一个参数。 请注意只有函数的最后一个参数才允许是可变的。 ## 通过一些例子理解可变参数函数如何工作 你是否曾经想过 `append` 函数是如何将任意个参数值加入到切片中的。这样 `append` 函数可以接受不同数量的参数。 ```go func append(slice []Type, elems ...Type) []Type ``` 上面是 `append` 函数的定义。在定义中...
# Go经典入门10:数组和切片 ## 数组 数组是同一类型元素的集合。例如,整数集合 `5, 8, 9, 79, 76` 形成一个数组。`Go` 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 `interface{}` 类型数组,可以包含任意类型) ### 数组的声明 一个数组的表示形式为 `[n]T`。`n` 表示数组中元素的数量,`T` 代表每个元素的类型。元素的数量 `n` 也是该类型的一部分(稍后我们将详细讨论这一点) 可以使用不同的方式来声明数组,让我们一个一个的来看。 ```go package main import ( "fmt" )...
# Go经典入门9:switch语句 `switch` 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 `if else` 子句的常用方式。 看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如 0 是拇指,1 是食指等等。 ```go package main import ( "fmt" ) func main() { finger := 4 switch finger { case 1: fmt.Println("Thumb")...
# Go经典入门8:循环 > 循环语句是用来重复执行某一段代码。 `for` 是 `Go` 语言唯一的循环语句。`Go` 语言中并没有其他语言比如 `C` 语言中的 `while` 和 `do while` 循环。 ## for 循环语法 ```go for initialisation; condition; post { } ``` 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 `true` ,则...