函数高级、类型名别名、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)
}

数组

原文地址:https://www.cnblogs.com/yangjiaoshou/p/12017381.html

时间: 2024-10-15 22:14:13

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

使用typedef给函数指针类型一个别名

//使用typedef给函数指针类型一个别名 //typedef没有定义新的类型,给已经有的类型起一个别名,减少输入 typedef int(PADD)(int a, int b); //类型, PADD存储函数地址 typedef void(*MEG)(char s[]); void main() { PADD padd1 = add; //创建函数指针 printf("%d",padd1(11,23)); MEG meg1 = msg; meg1("心里的雨倾盆的下&qu

【Go入门教程3】基本类型 和 高级类型

基本类型 Go 有很多预定义类型,这里简单地把它们分为 基本类型 和 高级类型.Go 的基本类型并不多,而且大部分都与整数相关,如下表所示: 名 称 宽度(字节) 零 值 说 明 bool 1 false 布尔类型,其值不为真即为假.真用常量 true 表示,假由常量 false 表示 byte 1 0 字节类型,它也可以看作是一个由 8 位二进制数表示的无符号整数类型 rune 4 0 rune 类型,它是有 Go 语言定义的特有的数据类型,专用于存储 Unicode 字符.它也可以看作一个由

TS(6)-- 类型推论、类型兼容性、高级类型

2019-11-09: 学习内容:类型推论.类型兼容性.高级类型 一.类型推论:类型是在哪里如何被推断的 在有些没有明确指出类型的地方,类型推论会帮助提供类型.如:let x = 3;  变量x的类型被推断为数字. 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时.大多数情况下,类型推论是直截了当地. 最佳通用类型:如: let x = [0, 1, null];   两种选择:number 和 null , 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型

TypeScript高级类型

交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型. 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性. 例如,Person & Serializable & Loggable同时是Person和Serializable和Loggable. 就是说这个类型的对象同时拥有了这三种类型的成员. 我们大多是在混入(mixins)或其它不适合典型面向对象模型的地方看到交叉类型的使用. (在JavaScript里发生这种情况的场合很多

从C#到TypeScript - 高级类型

C# vs TypeScript - 高级类型 上一篇讲了基础类型,基本上用基础类型足够开发了,不过如果要更高效的开发,还是要看下高级类型,这篇和C#共同点并不多,只是延用这个主题. 联合类型 可以从字面上进行理解:其实就是多个类型联合在一起,用|符号隔开.如: string | number, 表示希望这个类型既可以是string,又可以是number.联合类型的字段只能调用这些类型共同拥有的方法,除非类型推论系统自动判断出真正的类型. //这里sn就是一个联合类型的字段,由于类型推论推断出s

用typedef定义函数指针类型(转)

typedef可以用于定义函数指针类型: [语法]typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表) [用途]1.可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了:2.有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用. [示例] 例1:typedef void (*PF)(int x);

python 学习笔记day07-python函数高级应用

函数高级应用 变量作用域 全局变量 标识符的作用域是定义为其声明在程序里的可应用范围,也就是变量的可见性 在一个模块中最高级别的变量有全局作用域 全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的 局部变量 局部变量只是暂时地存在,仅仅只依赖于定义他们的函数现阶段是否处于活动 当一个函数调用出现时,某局部变量就进入声明他们的作用域,在那一刻,一个新的局部变量名为那个对象创建了 一旦函数完成,框架被释放,变量将会离开作用域 如果局部与全局有相

c++函数参数类型-值,指针,引用

    以" 值传递"方式向函数传递参数 在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数.这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身. 例如: void changeValue(int originalValue,int newValue){     originalValue = newValue;   }      int main(){     int myNum=20;     changeV

函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

函数指针是指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的.函数指针有两个用途:调用函数和做函数的参数. 1 #include<stdio.h> 2 int max(int