Go程序基本结构
// 定义包名,package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
package main
// 导入需要使用的包(的函数,或其他元素)
import "fmt"
// 程序的入口函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数。
func main() {
fmt.Println("Hello, World!")
}
数据类型:基本数据类型;高级数据类型
切片 make()
通道 channel()
接口interfance()
变量声明
- var value_name value_type; value_name = value
- var value_name = value
- var value_name := value
注意第三种声明方式 只能被用在函数体内,而不可以用于全局变量的声明与赋值; 且左侧的变量不应该是已经声明过的,否则会导致编译错误
** Go 基本命令**
1. go build 命令主要是用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包。
2.go get 命令主要是用来动态获取远程代码包的。
3.go run 命令主要用于编译并运行Go程序。
4.go test 命令,会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件
什么是接口
1.方法声明的集合
2.任何类型的对象实现了在interface 接口中声明的全部方法,则表明该类型实现了该接口
3.interface 可以作为一种数据类型,实现了该接口的任何对象都可以给对应的接口类型变量赋值
类型
interface{} 类型没有声明任何一个方法,俗称空接口。interface{} 在我们需要存储任意类型的数值的时候相当有用,有点类似于C语言的void*类型。
协程
goroutine,
Golang 在 runtime、系统调用等多方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时,会主动把当前 goroutine 的CPU § 转让出去,让其他 goroutine 能被调度并执行,也就是 Golang 从语言层面支持了协程。Golang 的一大特色就是从语言层面原生支持协程,在函数或者方法前面加 go关键字就可创建一个协程。
**channel管道**
Channel(管道) 可以被认为是协程之间通信的管道。与水流从管道的一端流向另一端一样,数据可以从信道的一端发送并在另一端接收。
声明: 使用内置函数make创建 a := make(chan int)
package main
import (
"fmt"
"time"
)
func Producer(queue chan<- int) {
for i := 0; i < 10; i++ {
queue <- i //写入
fmt.Println("create :", i)
}
}
func Consumer(queue <-chan int) {
for i := 0; i < 10; i++ {
v := <-queue // 读出
fmt.Println("receive:", v)
}
}
func main() {
queue := make(chan int, 88)
go Producer(queue)
go Consumer(queue)
time.Sleep(1 * time.Second)
}