zoukankan      html  css  js  c++  java
  • 2.GO-可变参数函数、匿名函数和函数变量

    2.1.可变参数函数

    • 可变参数指参数的个数可以是任意个
    • 可变参数必须在参数列表最后的位置,在参数名和类型之间添加三个点表示可变参数函数
    • 声明函数时,在函数体把可变参数当作切片使用即可
    package main
    
    import "fmt"
    
    func demo(name string, hover ... string)  {
    	fmt.Println(name,"的爱好是")
    
    	for i,n := range  hover{
    		fmt.Println(i,n)
    	}
    }
    
    func main() {
    	demo("derek","看书","打球","游戏")
    }
    
    //结果
    derek 的爱好是
    0 看书
    1 打球
    2 游戏
    

    2.2.匿名函数

    package main
    
    import "fmt"
    
    func main() {
    	//第一种:无参数无返回值
    	func(){
    		fmt.Println("无参数无返回值匿名函数")
    	}()
    
    	//第二种:有参数
    	func(name string){
    		fmt.Println("名字为:",name)
    	}("derek")
    
    	//第三种:有返回值
    	name := func() string{
    		return "zhang_derek"
    	}()
    	fmt.Println(name)
    }
    

    2.3.函数变量

     在go语言中函数也是一种类型

    • 定义完函数变量后,可以使用匿名函数进行赋值,也可以使用已经定义好的函数进行赋值
    • 函数变量定义以后与普通函数调用语法相同,变量名就是普通函数声明的函数名
    • 函数变量是除了slice,map,channel,interface外第五种引用类型

     (1)函数变量是引用类型

    package main
    
    import "fmt"
    
    func b()  {
    	fmt.Println("bbb")
    }
    
    func main() {
    	//函数变量是引用类型
    	var a func()
    	a = b
    	//内存地址相同
    	fmt.Println(a,b)     //0x47d820 0x47d820
    }
    

    (2)函数作为参数

    package main
    
    import "fmt"
    
    func mydo(arg func(name string))  {
    	fmt.Println("执行mydo")
    	arg("derek")
    }
    
    func main() {
    	mydo(func(name string) {
    		fmt.Println(name)
    	})
    }
    

    (3)函数作为返回值

    package main
    
    import "fmt"
    
    //函数作为返回值
    func a() func() int{
    	return func() int {
    		return 110
    	}
    }
    
    func main() {
    	result := a()
    	r2 := result()
    	fmt.Println(r2)    //110
    }

     

     
  • 相关阅读:
    关于Servelet在Tomcat中执行的原理
    类变量被final修饰编译时结果确定变为宏
    本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法(Windows)
    leetcode_227. 基本计算器 II
    leetcode_150. 逆波兰表达式求值
    leetcode_145. 二叉树的后序遍历
    leetcode_144. 二叉树的前序遍历
    leetcode_94. 二叉树的中序遍历
    leetcode_71. 简化路径
    1598. 文件夹操作日志搜集器
  • 原文地址:https://www.cnblogs.com/gaidy/p/11864438.html
Copyright © 2011-2022 走看看