函数高级、类型名别名、if-else 的使用、包的使用、for循环、swich的使用、数组的使用

一、函数高级:

1、闭包函数:定义在函数内部,对外部作用有引用

2、go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字

//函数高级
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")
//
//}
函数高级使用

类型名别名:

//给类型命别名
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判断内部使用

//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)
}
if-else

三、包的使用:

1、package mypackage  //通常情况下,包名就是文件夹名,在同一个文件夹下,包名必须一致

2、//在同一个包下,变量,函数,都不能重复定义

//在包内定义的函数如果是小写字母开头,表示只能在包内部使用
//在外部包想使用,必须首字母大写

package mypackage

import "fmt"
//在同一个包下,变量,函数,都不能重复定义
//在包内定义的函数如果是小写字母开头,表示只能在包内部使用
//在外部包想使用,必须首字母大写
func Test1()  {
    fmt.Println(test(1,2))
    fmt.Println("xxxx")
}
mypackage.go
// 包的使用
package main

import "mypackage"
import "fmt"



func main() {

    //想使用mypackage包下的test函数和test1函数
    //函数名必须首字母大写
    mypackage.Test1()
    fmt.Println("xxx")
包的引用

四、for 循环的使用:

//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)
    //}

}
for循环的使用

五、swich语句:

//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")

}
swich

六、数组的使用:

1、数组 在定义阶段,长度和类型就固定了,以后不能更改

2、

//数组 在定义阶段,长度和类型就固定了,以后不能更改
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)
}
数组

猜你喜欢

转载自www.cnblogs.com/yangjiaoshou/p/12017381.html