接口 是方法特征的命名集合. Example: package main import "fmt" //让方法,实现api这个接口. type api interface{ getname() string getnumber() int } type product struct{ name string number int } //为结构体定义两个方法.getname() getnumber() //要在 Go 中实现一个接口,我们只需要实现接口中的所有方法 func (r pr…
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…
目录 接口介绍与定义 空接口和类型断言 指针接收和值接收区别 接口嵌套 接口介绍与定义 1. 接口定义了一个对象的行为规范 A. 只定义规范,不实现B. 具体的对象需要实现规范的细节 2.Go中接口定义 A. type 接口名字 interfaceB. 接口里面是一组方法签名的集合 type Animal interface { Talk() Eat() int Run() } 3.Go中接口的实现 A. 一个对象只要包含接口中的方法,那么就实现了这个接口B. 接口类型的变量可以保存具体类型的实…
在前面的例子中,我们用互斥锁进行了明确的锁定来让共享的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…