Go 内建多返回值 支持.这个特性在 Go 语言中经常被用到,例如用来同时返回一个函数的结果和错误信息. Example: package main import "fmt" //(int, int)标志函数有两个int返回值. func example_func(a int, b int) (int, int){ return a, b } func main(){ c, d := example_func(1, 3) //fmt.Printf用来格式化字符串. fmt.Printf…
在前面的例子中,我们用互斥锁进行了明确的锁定来让共享的state 跨多个 Go 协程同步访问.另一个选择是使用内置的 Go协程和通道的的同步特性来达到同样的效果.这个基于通道的方法和 Go 通过通信以及 每个 Go 协程间通过通讯来共享内存,确保每块数据有单独的 Go 协程所有的思路是一致的. Example: package main import ( "fmt" "math/rand" "sync/atomic" "time&quo…
在前面的例子中,我们讲过 for 和 range为基本的数据结构提供了迭代的功能.我们也可以使用这个语法来遍历从通道中取得的值 Example: package main import "fmt" //这个例子也让我们看到,一个非空的通道也是可以关闭的 //但是通道中剩下的值仍然可以被接收到. func main() { jobs := make(chan string, 2) jobs <- "one" jobs <- "two"…
Example: package main import "fmt" func main() { fmt.Println("hello world") } Result: $ go run hello-world.go hello world 有时候我们想将我们的程序编译成二进制文件.我们可以通过 go build 命来达到目的. $ go build hello-world.go $ ls hello-world hello-world.go 然后我们可以直接运行…
在 Go 中,变量 被显式声明,并被编译器所用来检查函数调用时的类型正确性 package main import "fmt" func main() { var 声明 1 个或者多个变量. var a string = "initial" fmt.Println(a) 你可以申明一次性声明多个变量. var b, c int = 1, 2 fmt.Println(b, c) Go 将自动推断已经初始化的变量类型. var d = true fmt.Println(…
for 是 Go 中唯一的循环结构.这里有 for 循环的三个基本使用方式. package main import "fmt" func main() { 最常用的方式,带单个循环条件. i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } 经典的初始化/条件/后续形式 for 循环. for j := 7; j <= 9; j++ { fmt.Println(j) } 不带条件的 for 循环将一直执行,直到在循环体内使用了 br…
if 和 else 分支结构在 Go 中当然是直接了当的了. package main import "fmt" func main() { 这里是一个基本的例子. if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } 你可以不要 else 只用 if 语句. if 8%4 == 0 { fmt.Println("8 is divisible…
switch ,方便的条件分支语句 package main import "fmt" import "time" func main() { 一个基本的 switch. i := 2 fmt.Print("write ", i, " as ") switch i { case 1: fmt.Println("one") case 2: fmt.Println("two") case 3…
在 Go 中,数组 是一个固定长度的数列. package main import "fmt" func main() { 这里我们创建了一个数组 a 来存放刚好 5 个 int.元素的类型和长度都是数组类型的一部分.数组默认是零值的,对于 int 数组来说也就是 0. var a [5]int fmt.Println("emp:", a) 我们可以使用 array[index] = value 语法来设置数组指定位置的值,或者用 array[index] 得到值.…
range 迭代各种各样的数据结构.让我们来看看如何在我们已经学过的数据结构上使用 rang 吧. package main import "fmt" func main() { 这里我们使用 range 来统计一个 slice 的元素个数.数组也可以采用这种方法. nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) rang…
函数 是 Go 的中心.我们将通过一些不同的例子来进行学习. Example: package main import "fmt" //定义一个函数使用关键字func //函数名名example_func//该函数有两个int类型参数a, b//函数返回类型int类型 func example_func(a int, b int) int{ return a + b } func main(){ ret := example_func(1, 3) fmt.Println("r…
可变参数函数.可以用任意数量的参数调用.例如,fmt.Println 是一个常见的变参函数. Example: package main import "fmt" //...int将参数指定为不定个数. func example_func(nums ...int) int{ //nums []类型 fmt.Println(nums) sum := 0 for _, num := range nums{ sum += num } return sum } func main(){ ret…