go静态类型

go静态类型 静态类型语言意味着变量必须指定一个类型,例如整型、字符串、布尔型和数组等。可以在声明变量时指定变量类型。大多数情况下,让编译器自动去推断变量类型(我们将看到一些简单的例子)。 关于静态类型,有许多相关内容可以介绍,但是我相信,要理解静态类型最好的方法就是去阅读代码。如果你使用过动态...
Go 2月前 阅读 2

go编译

go编译 编译是一个将源代码翻译成更低级语言的过程,例如汇编语言(例如go),或者其他中间语言(例如java和c#)。 编译型语言在使用过程中会有点不方便,因为编译过程比较耗时。如果不得不花掉几十分钟或者几个小时编译,那么很难实现快速迭代开发。在设计go语言时,编译速度是主要的设计目标之一。对于...
Go 2月前 阅读 6

运行go代码

go运行go代码 现在,让我们通过创建一个简单的示例,开启我们的go学习旅程,并学习如何编译和执行go程序。打开你最喜欢的文本编辑器,输入以下代码: package main func main() { println("it's over 9000!") }...
Go 2月前 阅读 6

go垃圾回收

go垃圾回收 当创建一些变量时,变量有一个确定的生命周期。例如函数中定义的局部变量,当函数退出时变量就不存在了。另外在其他情况下,至少对于编译器来说,这不是那么的明显。例如,某个被函数返回的变量的生命周期,或者被其他变量和对象引用的变量的生命周期,都是很难去判断的。如果没有垃圾回收机制,开发人员需...
Go 2月前 阅读 4

go类c语法

go类c语法 一般来说,如果一门语言具有类c语法,意味着当你习惯使用其他类c语言例如c、c++、java、javascript和c#,然后你就会发现go语言和它们也类似,至少表面上是。例如,使用&&表示一个布尔运算AND,==用于相等比较,{和}表示一个代码段的开始和结束,并且数组...
Go 2月前 阅读 4

go数组

go数组 如果你使用过python、ruby、perl、javascript或者php,也许你已经在写代码时使用过动态数组,这些数组在添加数据时会动态改变自己的大小。和大多数语言一样,在go中,数组是固定大小的。声明一个数组时我们必须指定它的大小,一旦数组的大小被指定,它就不能扩展变大: ...
Go 2月前 阅读 1

go指针类型和值类型

go指针类型和值类型 当你写go代码时,很自然的就会问自己,这里应该使用值类型还是指针类型?这有2则好消息。首先,尽管接下来我们要讨论,但是答案都是一样的。 一个局部变量赋值 结构体字段 函数返回值 传递给函数的参数 方法的接收者 其次,如果你不确定使用那个,那么就使...
Go 2月前 阅读 2

go组合

go组合 go支持组合,即一种结构体包含另外一个结构体。在一些语言中,这叫混入类或者特性。语言总是不能实现简明的组合机制。在java中: public class Person { private String name; public String getName() ...
Go 2月前 阅读 1

go结构体字段

go结构体字段 在之前的例子中,我们已经知道Saiyan有2个字段Name和Power,类型分别是字符串型和整型。字段可以是任意的类型,包括其他结构体类型或者我们还没有接触过的类型如:数组、映射、接口和函数类型。 例如,我们可以扩展Saiyan的定义: type Saiyan struc...
Go 2月前 阅读 1

go new

go new 尽管没有构造函数,go有一个内置的函数new,可以用来分配一个类型需要的内存。new(X)和&X{}是等效的: goku := new(Saiyan) // 等效 goku := &Saiyan{} 用那种方式取决于你,但是你会发现,当需要去初始化结构体...
Go 2月前 阅读 5

go构造函数

go构造函数 结构体没有构造函数,你可以创建一个函数返回一个相应类型的实例代替(类似一个工厂): func NewSaiyan(name string, power int) *Saiyan { return &Saiyan{ Name: name, ...
Go 2月前 阅读 1

go结构体上的函数

go结构体上的函数 我们可以将一个方法和一个结构体关联: type Saiyan struct { Name string Power int } func (s *Saiyan) Super() { s.Power += 10000 } 在上面的代码中,我...
Go 2月前 阅读 1

go声明和初始化

go声明和初始化 当我们第一次看见变量和声明时,我们仅仅看见一些内置的类型,比如整型和字符串。现在我们将学习结构体,并且我们会深入学习包括指针的内容。 通过一种最简单的方式去创建一个结构体值类型: goku := Saiyan{ Name: "Goku", ...
Go 2月前 阅读 3

go结构体

go结构体 go不是像c++、java、ruby和c#一样的面向对象语言。它没有对象和继承的概念。因此也没有很多面向对象语言的特性如多态和重载。 go提供了结构体,并且可以将一些方法和结构体关联。go也支持一种简单但是更有效的组合形式。总的来说,这是为了让代码更加简洁,但是在一些场合,你会失去一...
Go 2月前 阅读 1

go函数声明

go函数声明 这是一个很好的机会去介绍函数支持多值返回。查看下面3个函数:一个没有返回值,一个返回一个值,一个返回2个值。 func log(message string) { } func add(a int, b int) int { } func power(name strin...
Go 2月前 阅读 2

go变量和声明

go变量和声明 这将是美好的开始和结束,通过写下x = 4,我们查看变量,可以说声明了一个变量并赋值,但是很不幸,go语言变量声明和赋值比这更复杂。通过学习一些简单的示例开始学习变量声明和赋值。然后在下一章,当我们创建并使用结构体时,我们会深入学习。尽管如此,你需要花一些时间去适应。 你可能会惊...
Go 2月前 阅读 3

go导入包

go导入包 go有很多内置的函数,例如println,不需要引用即可使用。但是如果不借助go的标准库或者第三方库,我们能做的事情有限。在go中,使用关键字import在代码中导入一个包并使用。 修改我们的程序: package main import ( "fmt&q...
Go 2月前 阅读 2

go映射

go映射 go语言中的映射在其他语言中叫字典或哈希表。正如你想象的:你可以定义一个键和值,然后可以从映射中获取、设置和删除这个值。 和切片一样,映射也是可以通过make创建。让我们看看下面这个例子: func main() { lookup := make(map[string]...
Go 2月前 阅读 1

go切片

go切片 在go中,你一般很少直接使用数组。相反,你会使用切片。切片是一个轻量级的结构体封装,这个结构体被封装后,代表一个数组的一部分。这里指出了一些创建切片的方式,并指出我们以后会在何时使用这些方式。 第一种方式和我们创建一个数组时有点细微的变化: scores := []int{1,4,2...
Go 2月前 阅读 1

go指针类型和值类型

go指针类型和值类型 在第二章我们已经学习了何时传递和赋值一个指针类型或者值类型。现在我们在数组和映射方面再谈论该话题。我们该使用哪一个? a := make([]Saiyan, 10) //或者 b := make([]*Saiyan, 10) 很多开发人员认为传递b至一个函数或者...
Go 2月前 阅读 1