从 0 到 1 进修 Go 说话 已翻译 100%

oschina 投递于 2018/12/25 15:25 (共 35 段, 翻译完成于 01-04)
浏览 4863
收藏 83
6
加载中

图片:Gopher 吉祥物和旧 logo

扼要简介下 Go(Golang)说话。Go 说话的是由谷歌的工程师 Robert Griesemer、Rob Pike 和 Ken Thompson 创造的一种静态类型编译说话。首个开源版本发布于2012年3月。

“Go 是一种开源编程说话,可以轻松构建简单、靠得住、高效的软件。”

— GoLang

mufengs
翻译于 2018/12/26 10:58
0

在诸多编程说话中,处理给定成绩的办法有很多,法式榜样员须要花很多时间思虑关于处理成绩的最好办法。

然则,Go 信赖更少的功能 - 只要一种精确的办法来处理成绩。

这节俭了开辟人员的时间,并使大年夜型代码库易于保护。 Go 中没有 maps 和 filters 等“富有表示力”的功能。

“当你须要增长功能的丰富性,常常伴随着开支的增长”

- Rob Pike

golang 最新发布的 logo: https://blog.golang.org/go-brand

mufengs
翻译于 2018/12/26 13:37
0

入门

Go 法式榜样由包构成。编译器会将 main 包编译成可履行法式榜样,而不是共享库。main 包是全部应用的出口。main 包的定义以下:

package main

接上去,我们在 Go 的任务空间中创建一个叫做 main.go 的文件,来完成一个简单的 hello world 例子。

kjmeng
翻译于 2018/12/26 13:08
0

任务空间(Workspace)

Go 的任务空间可以经过过程情况变量 GOPATH 定义。

你须要在这个任务空间中编写你本身的代码。Go 为搜刮 GOPATH 和 GOROOT 指定的目次中的一切包,GOROOT 变量是在装置 GO 时设置的,也就是 go 说话装置的目次。

将 GOPATH 设置到预期目次。如今,增长一个文件夹 ~/workspace

# export env
export GOPATH=~/workspace

# go inside the workspace directory
cd ~/workspace

接上去在这个任务空间中创建 main.go ,写入下面的代码。

kjmeng
翻译于 2018/12/26 13:14
0

Hello World!

package main

import (
 "fmt"
)

func main(){
  fmt.Println("Hello World!")
}

在下面的示例代码中,fmt 是 Go 的一个内置包,重要完成格局化 I/O 的功能。

在 Go 说话中,经过过程 import 关键字引入一个包。func main 是可履行代码的出口。fmt 中的 Println 函数完成 “hello world” 的打印。

下面测验测验运转这个文件。我们可以经过过程两种办法运转一个 Go 敕令。我们知道 Go 是一个编译性说话,所以,在履行之前我们先来编译它。

> go build main.go

下面的敕令就生成了一个可履行文件 main ,接上去我们运转这个文件:

> ./main
 # Hello World!

接上去看别的一种加倍简单的履行方法。go run 敕令将编译步调笼统。那么,经过过程下面的敕令便可以履行这个法式榜样。

go run main.go
 # Hello World!

留意:可以应用 https://play.golang.org 测验测验下面的代码。

kjmeng
翻译于 2018/12/26 14:10
0

变量

Go 的变量必须显式声明。Go 是静态类型的说话,也就是说,在变量声明时要检查变量类型。可以以下声明一个变量:

var a int

在这类情况下,变量的值会被设为0。也能够经过过程下面的语法声明变量并初始化为不合的值:

var a = 1

在这里,变量主动被断定为一个整形变量。我们可以经过过程简化情势来声明变量:

message := "hello world"

也能够在一行声明多个变量:

var b, c int = 2, 3
kjmeng
翻译于 2018/12/26 15:43
0

数据类型

和其他编程说话一样,Go 说话也有不合的数据类型。接上去就来看一下:

数字(Number)、字符串(String)和布尔(Boolean)

可支撑数字存储类型有 int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr…

字符串以字节序列的情势存储。用string关键字表示和声明。

布尔型变量的关键字是 bool 。

Go 还支撑以 complex64 和 complex128 声明的复杂数字类型。

var a bool = true
var b int = 1
var c string = 'hello world'
var d float32 = 1.222
var x complex128 = cmplx.Sqrt(-5 + 12i)
kjmeng
翻译于 2018/12/26 15:51
0

数组、切片、集合

数组是雷同数据类型的元素序列。数组具有在声明中定义的固定长度,是以不克不及停止扩大。数组声明为:

var a [5]int

数组也可所以多维的。我们可以应用以下格局创建它们:

var multiD [2][3]int

当数组的值在运转时更改时,数组限制了这类情况。 数组也不供给获得子数组的才能。 为此,Go 有一个名为 slices 的数据类型。 切片存储一系列元素,可以随时扩大。 切片声明类似于数组声明 - 没有定义容量:

var b []int

这将创建一个零容量和零长度的切片。切片也能够定义容量和长度。我们可以应用以下语法:

numbers := make([]int,5,10)

这里,切片的初始长度为5,容量为10。

mufengs
翻译于 2018/12/26 17:01
0

切片是数组的笼统。切片应用数组作为底层构造。切片包含三个组件:容量,长度和指向底层数组的指针,以下图所示:

图片来源: https://blog.golang.org/go-slices-usage-and-internals

经过过程应用append或copy函数可以增长切片的容量。 append函数可认为数组的末尾添加值,并在须要时增长容量。

numbers = append(numbers, 1, 2, 3, 4)

增长切片容量的另外一种办法是应用复制功能。只需创建另外一个具有更大年夜容量的切片,并将原始切片复制到新创建的切片:

// create a new slice
number2 := make([]int, 15)
// copy the original slice to new slice
copy(number2, number)
mufengs
翻译于 2018/12/26 21:52
0

我们可以创建切片的子切片。这可以应用以下敕令完成:

// initialize a slice with 4 len and values
number2 = []int{1,2,3,4}
fmt.Println(numbers) // -> [1 2 3 4]
// create sub slices
slice1 := number2[2:]
fmt.Println(slice1) // -> [3 4]
slice2 := number2[:3]
fmt.Println(slice2) // -> [1 2 3]
slice3 := number2[1:4]
fmt.Println(slice3) // -> [2 3 4]

集合是Go中的数据类型,它将键映照到值。我们可以应用以下敕令定义映照:

var m map[string]int

这里m是新的集合变量,它的键为字符串,值为整数。我们可以轻松地将键和值添加到地图中:

// adding key/value
m['clearity'] = 2
m['simplicity'] = 3
// printing the values
fmt.Println(m['clearity']) // -> 2
fmt.Println(m['simplicity']) // -> 3
mufengs
翻译于 2018/12/28 17:03
0
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。
我们的翻译任务遵守 CC 协定,假设我们的任务有侵犯到您的权益,请及时接洽我们。
加载中

评论(8)

y
yqbjtu
the method name starting without a capital letter will be private(原文) ---》 以大年夜写字母开首的办法称号将是私有的。(以后的译文)

just a reminder。 这句须要修改一下, Go说话中,以小写字符开首的办法是私有的。
woshixin
woshixin
就从开端写一些小对象开端吧
iGoo
iGoo

援用来自“孤单的大年夜师”的评论

用进修go和用go来写项目,差的不是一点半点。一个phper的心声。。。
说出了大年夜实话
小卡车呼呼呼
你们不要学,我刚学完。
孤单的大年夜师
孤单的大年夜师
用进修go和用go来写项目,差的不是一点半点。一个phper的心声。。。
来自山卡拉的你
来自山卡拉的你

援用来自“每天笑笑”的评论

甚么混乱无章的,办法有时大年夜写开首,有时又是小写开首?
golang大年夜写开首的办法是裸露给其他包应用时须要的, 假好像一个包名, 小写便可
每天笑笑
每天笑笑
甚么混乱无章的,办法有时大年夜写开首,有时又是小写开首?
mufengs
mufengs
#Go#不是很完全,感到还须要完美。回头多揣摩揣摩
前往顶部
顶部