02 函数高级 if swith条件判断 for循环 自定义包
一 、函数高级
1.内部函数和闭包函数
package main import "fmt" //内层函数-匿名函数:定义在函数内部的函数,必须加括号调用 //go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字 func test(a int) { func() { fmt.Println("我是内层函数") }() //go贱毛病,定义了就必须调用,所以必须加()调用 }
//闭包函数 在内部+引用外部 不需要返回 func test(a int) (){ //var c int =100 func() { fmt.Println(a) // 这里引用c,也是引用外部,也符合闭包函数 fmt.Println("我是闭包函数") }() } // 有返回值类型 func test1(a int) (func()) { b:=func() { fmt.Println(a) fmt.Println("我是闭包函数") } return b }
2.函数当作参数和返回值
// 定义一个函数,传入函数,返回函数 package main import "fmt" func main() { a:=test2 a=test(a) a() fmt.Println(a) } func test(a func()) func() { b:= func() { fmt.Println("我先执行") a() fmt.Println("函数执行完了") } return b } func test2() { fmt.Println("xxxx") } /* 我先执行 xxxx 函数执行完了 0x49a920 */
3.起别名
package main
func main() {
var a MyInt=10
fmt.Println(a)
} //重命名 type MyFunc func(a int,b int) func() // 给这一大堆命名,MyFunc不再是func类型 type MyInt int func test() (MyFunc) { //无论多复杂牢记 func + 参数 + 返回值类型 c:= func(a int,b int) func(){ return func() { } } return c }
二、条件判断
1. if else
//if -else package main import "fmt" func main() { a := 90 //if 条件{} 大括号和条件之间不能换行 if a == 90{ fmt.Println("a 是90"); } if a >90{ fmt.Println("a 大于90") }else if a<90{ fmt.Println("a 小于90") }else { fmt.Println("a 等于90") } //在条件中可以定义变量,但是它的作用于范围只在if判断内部使用 if a :=90;a>90{ fmt.Println("大于") }else if a==90{ fmt.Println(a) } //fmt.Println(a) }
2. swith case
//switch语句 package main import "fmt" func main() { //基本用法 相当于 if a:=10 switch a { case 1: fmt.Println("1") case 2: fmt.Println("2") case 10: fmt.Println("10") } //default 相当于if | elif | else a:=11 switch a { case 1: fmt.Println("1") case 2: fmt.Println("2") case 10: fmt.Println("10") default: fmt.Println("不知道") } //多值匹配 a:=11 switch a { case 1,4,5: fmt.Println("1") case 2,8,9: fmt.Println("2") case 10,11: fmt.Println("10") default: fmt.Println("不知道") } //无表达式的 switch a:=11 switch { case a>10: fmt.Println("大于10") case a<10: fmt.Println("小于10") default: fmt.Println("10") //Fallthrough //穿透,只要遇到,无条件执行下一个case的内容 a:=10 switch a { case 1: fmt.Println("1") fmt.Println("xxxx") case 2: fmt.Println("2") case 10: fmt.Println("10") fallthrough case 11: fmt.Println("11") test5() fallthrough case 12: fmt.Println("12") } } func test5() { fmt.Println("xxxxxx") }
三、for循环
//for 循环 package main func main() { // 基本语法 完整版 for i:=0;i<10;i++{ fmt.Println(i) } //三部分,都可以省略 //先省略第一部分 //i :=0 //for ;i<10;i++{ // fmt.Println(i) //} //省略第三部分 //i :=0 //for ;i<10;{ // i++ // fmt.Println(i) //} //省略第二部分 //for ;;{ // fmt.Println("xxxx") //} //死循环 //for { // fmt.Println("xxxx") //} //只写条件 for 条件{} 等同于while循环 //for { // // fmt.Println("sdffsdsa") //} //break和continue跟其他任何语言都一样 //for i:=0;i<10;i++{ // if i==5{ // break // } // fmt.Println(i) //} //for i:=0;i<10;i++{ // if i==5{ // continue // } // fmt.Println(i) //} }
四、包管理
GOPATH可修改路径,路径下有三个文件夹,没有自己建,自己的项目代码、包和第三方模块都放在src下
所有代码和第三方模块都放在GOPATH下,多项目时就会出问题,可以重新建立一个GOPATH,修改路径
在GOPATH下建立包pacakage,该包下建立两个文件pacakage1和pacakage2:
package mypackage //通常情况下,包名就是文件夹名,在同一个文件夹下,包名必须一致 func test(a,b int) int{ return a+b }
package mypackage import "fmt" //在同一个包下,变量,函数,都不能重复定义 //在包内定义的函数如果是小写字母开头,表示只能在包内部使用,在外部包想使用,必须首字母大写,因此推荐驼峰体命名 func Test1() { fmt.Println(test(1,2)) fmt.Println("xxxx") }
在项目中导入使用:
// 包的使用 package main import "mypackage" import "fmt" func main() { //想使用mypackage包下的Test函数和Test1函数 mypackage.Test1() fmt.Println("xxx") }
导入第三方的包
-下载第三方包(大多都在github上) go get github.com/astaxie/beego beego、gin

浙公网安备 33010602011771号