Go 函数、包、mode模式
Go函数
package main import "fmt" func main() { fmt.Println("开始") // 1 函数调用 //test() // 2 函数调用 //方式一 //a:=10 //test(a) //方式二 //test(10) // 3 函数调用 //test(10,11) // 4 函数调用 //a :=test(10,11) //fmt.Println(a) // 5 函数调用(有几个返回值,就必须用几个值来接收) //a,b := test(10,11) //fmt.Println(a,b) //第二个参数不接收了(跟python中_不一样,python中_就是一个变量) //a,_:=test(10,11) //fmt.Println(a,b) //fmt.Println(a) //fmt.Println(_) // 6 函数调用 //test(1,2,3,4,5,6,788,99) // 7 匿名函数调用(定义在函数内部,没有名字) // 放在函数内部,有两种处理方式 //1 让它执行 //2 当参数返回 //否则报错 // func (){ // fmt.Println("我是匿名函数") // }() // 8 函数是一等公民 //test()() //a:=test() //a() // 9 函数的调用 //test(10)() //a:= test(10) //a() // 10 闭包函数高级 //test(99)(88,77) a:=test(99) a(88,77) } // func关键字 函数名(参数1 类型,参数2 类型) {函数体的内容} //1 定义一个无参数、无返回值的普通函数 //func test() { // fmt.Println("我是test") //} //2 带一个参数、无返回值 // go中全是位置参数,没有所谓的关键字参数、默认参数 //func test(a int) { // fmt.Println(a) //} //3 带多个参数、无返回值 //func test(a int,b int) { // fmt.Println(a+b) //} //如果两个参数都是同一种类型,就可以简略写 //func test(a,b int,c string) { // //} //4 带多个参数、只有一个返回值(指明返回参数类型是什么) // 返回值类型是int类型 //func test(a,b int) int{ // c := a+b // return c //} //5 带多个参数,多返回值(返回值类型,返回值类型) //func test(a,b int)(int,int) { // c :=a+b // d :=a*b // return c,d //} //6 可变长参数 //func test(a...int) { // // a是切片 // fmt.Println(a) //} //8 函数是一等公民(头等函数),函数也是一种类型 // 在一门语言中,如果函数可以赋值给一个变量,那函数就叫一等公民 // 返回值是函数类型 //func test() func() { // var a func()=func() { // fmt.Println("我是内层函数") // } // return a //} //9 闭包函数 //func test(b int) func() { // a:= func() { // fmt.Println(b) // } // return a //} //10 闭包函数高级 func test(b int) func(x,y int){ a := func(x,y int){ fmt.Println(b+x+y) } return a }
Go 包介绍
//1 在同一个包下(文件夹下),包名必须一致 //2 以后,包名就是文件夹的名字 //3 同一个包下,同名函数只能有一个(init除外) //4 一个包(当成一个文件),同一包下的函数,直接调用即可 //5 导包的位置,从src路径开始 //6 包只要在src路径下就可以导入 //7 大写表示导出,在外部包可以使用,小写只能再包内部适应 //8 使用第三方包:go get github.com/astaxie/beego (放到gopath的src路径下) -python:pip3 install requests package main import "github.com/astaxie/beego" func main() { beego.Run() }
Go mode模式介绍
//1 包导入 import . "github.com/astaxie/beego" 类似于python中form xx import * //2 包导入 import _ "github.com/go-sql-driver/mysql" 触发init的执行,但是不试用包内的函数 //3 包导入 import f "fmt" 重命名,以后直接用f //4 对比python中__init__.py //在代码中导入模块 import xx 实质上触发__init__.py 的执行(在__init__.py中也可以执行其他代码,对应到go中就是init函数) 一般情况下,在__init__.py写from xx import 会使用到的函数,导过来 以后再用 xx.函数() //5 go mod没有之前,可以设置多个gopath,开发某个项目,切到不同的gopath,类似于虚拟环境 //6 go env -GO111MODULE="off" 表示go mod模式是关闭的,则用的是gopath -一旦开启了go mod模式,代码不需要放在src路径下(任意位置都可以) -在项目路径下要有 go.mod 文件(文件里记录了,go版本,项目依赖的包,包的版本) -写代码,建自己的包即可 -一般情况下,项目有一个main.go 内部是main包,main函数,整个程序的入口