函数高级、类型名别名、if-else 的使用、包的使用、for循环、swich的使用、数组的使用
一、函数高级:
1、闭包函数:定义在函数内部,对外部作用有引用
2、go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//函数高级 package main import "fmt" //闭包函数:定义在函数内部,对外部作用有引用 //内层函数:定义在函数内部的函数 //go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字 //func test(a int) { // func() { // fmt.Println("我是内层函数") // }() //} //闭包函数 //func test(a int) (func()) { // //var c int =100 // b:=func() { // fmt.Println(a) // fmt.Println("我是闭包函数") // } // return b //} // 定义一个函数,传入函数,返回函数 //func test(a func()) func() { // b:= func() { // fmt.Println("我先执行") // a() // fmt.Println("函数执行完了") // } // return b //} //func test2() { // fmt.Println("xxxx") // //}
类型名别名:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//给类型命别名 type MyFunc func(a int,b int) func() type MyInt int func test() (MyFunc) { c:= func(a int,b int) func(){ return func() { } } return c } func main() { //a:=test(3) //a() //a:=test2 //a=test(a) //a() //此处的MyInt 和 int不是同一种数据类型 var a MyInt=10 var b int =90 a=MyInt(b) fmt.Println(a) }
二、if-else的使用:
1、大括号和条件之间不能换行
2、在条件中可以定义变量,但是它的作用于范围只在if判断内部使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//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) }
三、包的使用:
1、package mypackage //通常情况下,包名就是文件夹名,在同一个文件夹下,包名必须一致
2、//在同一个包下,变量,函数,都不能重复定义
//在包内定义的函数如果是小写字母开头,表示只能在包内部使用
//在外部包想使用,必须首字母大写
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package mypackage import "fmt" //在同一个包下,变量,函数,都不能重复定义 //在包内定义的函数如果是小写字母开头,表示只能在包内部使用 //在外部包想使用,必须首字母大写 func Test1() { fmt.Println(test(1,2)) fmt.Println("xxxx") }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 包的使用 package main import "mypackage" import "fmt" func main() { //想使用mypackage包下的test函数和test1函数 //函数名必须首字母大写 mypackage.Test1() fmt.Println("xxx")
四、for 循环的使用:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//for 循环 package main func main() { //for initialisation; condition; post { //} //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) //} }
五、swich语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//switch语句 package main import "fmt" func main() { //基本用法 //a:=10 //switch a { //case 1: // fmt.Println("1") //case 2: // fmt.Println("2") //case 10: // fmt.Println("10") // //} //default //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 a:=10 switch a { case 1: fmt.Println("1") fmt.Println("xxxx") case 2: fmt.Println("2") case 10: fmt.Println("10") //穿透,无条件执行下一个case的内容 fallthrough case 11: fmt.Println("11") test5() fallthrough case 12: fmt.Println("12") } } func test5() { fmt.Println("xxxxxx") }
六、数组的使用:
1、数组 在定义阶段,长度和类型就固定了,以后不能更改
2、数组是值类型
所有的函数传参都是copy传递
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//数组 在定义阶段,长度和类型就固定了,以后不能更改 package main import "fmt" func main() { //var a [5]int //定义了一个长度为5的int类型数组 //a[1]=100 //把2个位置放上100 //fmt.Println(a) //定义并赋初值 //var a [6]int=[6]int{1,2,3,4,5,6} //var a =[6]int{1,2,3} //a :=[6]int{1,2,3} //a[5]=100 //fmt.Println(a) //第99个位置设为99 //a :=[100]int{1,2,98:99,87:88} ////a[-9]=19 不支持 //fmt.Println(a) //数组是值类型 //所有的函数传参都是copy传递 //a:=[4]int{1,2,3} //test6(a) //fmt.Println(a) //数组的长度 内置函数len //a:=[4]int{1,2,3} //fmt.Println(len(a)) //数组大小是类型一部分 //var a [4]int=[4]int{1,2,} //var b [5]int=[5]int{4,5,} //a=b //fmt.Println(a) //与或非 //&& || ! //a:=10 //if !(a>9||a<6){ // //} //数组迭代 //var a [4]int=[4]int{1,2,} //for i:=0;i<len(a);i++{ // fmt.Println(a[i]) //} //通过range迭代 //for i,v:=range a { ////for i:=range a { // fmt.Println("------",i) // fmt.Println(v) //} //多维数组 var a [7][2]int a[0][1]=100 fmt.Println(a) } func test6(b [4]int) { b[0]=100 fmt.Println(b) }