Go–包引用介绍
最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理)。
和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包。首先介绍在程序中如何引入包,引入包有以下几种方式:
1. 最简单的方式引入一个包的方式是直接引入包,例如:
import "fmt"
import "os"
2. 也可以通过下面的方式将包一块引入,并写在括号内:
inport (
"fmt"
"os"
)
通过上面的方式,可以引入系统包或第三方的包,下面重点介绍如何引入自定义的包和函数:
一般我们将主程序放在src的mian文件夹下(主程序中包含main函数,并将主程序的包名写为package main),将其他模块放在相应的文件夹下,例如下图所示
主函数在main.go文件中,主函数名也可以为其他,但必须包含main函数。在Go编程中,怎么引入自己编写的模块呢,例如在main.go中如何调用add.go、subtract.go或者是multiply.go中的文件。
add.go与subtract.go在cal文件夹下,所以这两个程序的包名为cal(package cal),multiply.go在multi文件夹下,所以程序的包名为multi(package multi)。如果mian函数要调用add.go或者subtract.go中的函数,必须要引入包"cal"(import “cal”)。要调用multiply.go中的函数,那就要引入包"multi",如果我们在程序中直接写import “multi”,编译器会提示我们can not find package “multi”。因为我们的"multi"包在包"cal"下,所以我们要把包名写完整"cal/multi",下面就可以调用各个文件中的函数了。
Go中如果函数名的首字母大写,表示该函数是公有的,可以被其他程序调用,如果首字母小写,该函数就是是私有的,因此我们只能调用add.go、subtract.go或者multiply.go中的公有函数。具体调用如下图:
add.go
subtract.go
multiply.go
最后注意:文件名可以和该包名不一致,但文件中使用的包名必须要和该包名一致。
go chan
声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:
ch := make(chan int)
通道(channel)
通道(channel)是用来传递数据的一个数据结构。
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <-
用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
ch <- v // 把 v 发送到通道 ch
v := <-ch // 从 ch 接收数据
// 并把值赋给 v
channel示例1
package main
import "fmt"
var pipe chan int
func add(a int,b int){
sum :=a+b
pipe <-sum
}
func main() {
pipe = make(chan int, 1)
go add(2,5)
ret :=<-pipe
fmt.Println("ret=",ret)
}
>>>ret= 7
go 关键字 创建goroutine 的
Go 允许使用 go 语句开启一个新的运行期线程, 即 goroutine,以一个不同的、新创建的 goroutine 来执行一个函数。 同一个程序中的所有 goroutine 共享同一个地址空间。
channel示例2
通过传参的方式传入通道
package main
import "fmt"
func add(a int, b int, c chan int) {
sum := a + b
c <- sum
}
func main() {
var pipe chan int
pipe = make(chan int, 1)
go add(2, 5, pipe)
ret := <-pipe
fmt.Println("ret=", ret)
}
定义函数
package main
import "fmt"
func testFunc(a int, b int) int {
sum := a + b
return sum
}
func main() {
ret := testFunc(1, 3)
fmt.Println(ret)
}
4
这里面的 testFunc(a int, b int) int 三个int分别代表参数a,b以及输出值的类型
多返回值
package main
import (
"fmt"
)
func calc(a int, b int) (int, int) {
sum := a + b
avg := (a + b) / 2
return sum, avg
}
func main() {
sum, avg := calc(2, 4)
fmt.Printf("sum=%d,avg=%d", sum, avg)
}
>>>sum=6,avg=3
欢迎关注公众号 获取更多干货