go的函数,包以及mode的补充
1、函数
/*
函数
*/
package main
import "fmt"
func main() {
//fmt.Println("开始")
//1 调用函数
//test()
//2 调用函数
//test1(10)
//3 调用函数
//test2(10, 11 )
//4 调用函数
//var a int
//a=test3(10,11)
//a:=test3(10,11)
//fmt.Println(a)
//5 调用函数(有几个返回值必须用几个参数来接)
//a,b:=test4(10,11)
//第二个参数不接受,但是和python中不一样是不可以打印出来的
//a,_:=test4(10,11)
//fmt.Println(a,b)
//6 可边长参数
//fmt.Println(1,2,3)
//test5(1,2,3,4)
//7 匿名函数(定义在函数内部,没有名字)
// 放在函数内部,有两种处理方案
//1让它执行
//2当参数返回
//否则报错
//func (){
// fmt.Println("我是匿名函数")
//}()
//8 调用函数 类型是func类型
//var a func()
//a=test()
//a()
//a:=test()
//a()
//9 闭包调用
//a:=test(10)
//a()
//10 闭包函数高级
a:=test(99)
a(11,12)
}
//func关键字 函数名(参数1 类型, 参数2 类型){函数体内容}
// 1 第一种无参数无返回值的普通函数
//func test(){
// fmt.Println("我是test")
//}
// 2 带参数 无返回值
// go 中全是位置参数,没有所谓的关键字参数以及默认参数
//func test1(a int) {
// fmt.Println(a)
//}
// 3 带多个参数 无返回值
// 如果两个参数都是同一个类型可以简写
//func test2(a ,b int) {
// fmt.Println(a+b)
//}
// 4 带多个参数,有一个返回值(也得指明返回参数的类型)
//表示返回值类型是int类型
//func test3(a,b int) int {
// c:=a+b
// return c
//}
// 5 带多个参数 有多个返回值(返回值类型,返回值类型)
//func test4(a,b int) (int,int) {
// c:=a+b
// d:=a*b
// return c,d
//}
//6 可变长参数
//可以传任意类型的int类型
//func test5(a ...int) {
// //a是切片
// fmt.Println(a)
//}
//7 匿名函数(定义在函数内部,没有名字)
//8 函数是一等公民(头等函数),函数也是一个类型
//在一门语言中,如果函数可以赋值给变量 ,那函数就叫一等公民 或者叫头等函数
//返回值是函数类型
//func test() func() {
// var a func()= func() {
// fmt.Println("我是内层函数")
// }
// return a
//}
//9闭包函数(定义在函数内部,可以引用给外部变量)
//闭包函数的作用:多了一种函数传参的方式
//func test(b int) func() {
// //b:=10
// a:= func() {
// fmt.Println(b)
// }
// return a
//}
// go语言中没有装饰器语法糖
//10 闭包函数高级
func test(b int) func(x,y int) {
var a func(x,y int)
a= func(x,y int) {
fmt.Println(b+x+y)
}
return a
}
//规范
/*
1 变量:go语言中变量区分大小写
2 文件名:建议使用下划线
3 大写字母开头 表示导出字段(外部包可以使用)
4 先导入第三方包 内置包 自己写的包
5 不像python中缩进代表同一段代码块
*/
2、包
//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()
}
3、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
export GO111MODULE=on # 设置打开
-一旦开启了go mod模式,代码不需要放在src路径下(任意位置都可以)
-在项目路径下要有 go.mod 文件(文件里记录了,go版本,项目依赖的包,包的版本)
-写代码,建自己的包即可
-一般情况下,项目有一个main.go 内部是main包,main函数,整个程序的入口
Only you can control your future
You're not alone. You still have family,peopel who care for you and want to save you.