在诸多编程语言中,解决给定问题的方法有很多,程序员需要花很多时间思考关于解决问题的最佳方法。
但是,Go 相信更少的功能 - 只有一种正确的方法来解决问题。
这节省了开发人员的时间,并使大型代码库易于维护。 Go 中没有 maps 和 filters 等“富有表现力”的功能。
“当你需要增加功能的丰富性,往往伴随着开销的增加”
- Rob Pike
golang 最新发布的 logo: https://blog.golang.org/go-brand
Go 的工作空间可以通过环境变量 GOPATH 定义。
你需要在这个工作空间中编写你自己的代码。Go 为搜索 GOPATH 以及 GOROOT 指定的目录中的所有包,GOROOT 变量是在安装 GO 时设置的,也就是 go 语言安装的目录。
将 GOPATH 设置到预期目录。现在,增加一个文件夹 ~/workspace
# export env export GOPATH=~/workspace # go inside the workspace directory cd ~/workspace
接下来在这个工作空间中创建 main.go ,写入下面的代码。
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 尝试上面的代码。
和其他编程语言一样,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)
数组是相同数据类型的元素序列。数组具有在声明中定义的固定长度,因此不能进行扩展。数组声明为:
var a [5]int
数组也可以是多维的。我们可以使用以下格式创建它们:
var multiD [2][3]int
当数组的值在运行时更改时,数组限制了这种情况。 数组也不提供获取子数组的能力。 为此,Go 有一个名为 slices 的数据类型。 切片存储一系列元素,可以随时扩展。 切片声明类似于数组声明 - 没有定义容量:
var b []int
这将创建一个零容量和零长度的切片。切片也可以定义容量和长度。我们可以使用以下语法:
numbers := make([]int,5,10)
这里,切片的初始长度为5,容量为10。
切片是数组的抽象。切片使用数组作为底层结构。切片包含三个组件:容量,长度和指向底层数组的指针,如下图所示:
图片来源: 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)
我们可以创建切片的子切片。这可以使用以下命令完成:
// 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
评论删除后,数据将无法恢复
评论(10)
just a reminder。 这句需要修改一下, Go语言中,以小写字符开头的方法是私有的。
引用来自“寂寞的大师”的评论
用学习go和用go来写项目,差的不是一点半点。一个phper的心声。。。引用来自“天天笑笑”的评论
什么乱七八糟的,方法有时大写开头,有时又是小写开头?