zoukankan      html  css  js  c++  java
  • go语言学习(三)——函数和闭包

    下面是函数的定义和闭包

    ps.说到闭包忍不住吐下槽,刚开始看书把我绕糊涂了。后来看了下代码,发现和C#,Lua语言的一样。就是要区分好这个变量是哪一个部分的局部变量,比如 for 循环里面的 i 外部是无法使用的。这个太新手了,就不细说了。

    以下,整理过的练习代码

    // GoStudy3 project main.go
    /*go语言学习
    函数
    闭包:可以用其他各种语言的局部变量全局变量来理解
    */
    package main
    
    import (
    	"errors"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(add(1, 5))
    	fmt.Println(sub(1, 6))
    	fmt.Println(addAll(1, 2, 3, 4, 5))
    	showAll("123rr", false, 2.3)
    
    	v1 := func(a int, b int) int { //函数可以作为参数传递&使用
    		return a * b
    	}
    	fmt.Println(v1(2, 5))
    
    	fmt.Println(func(a int, b int) int { //函数可以直接调用
    		return a / b
    	}(4, 2))
    }
    
    func add(a int, b int) int {
    	return a + b
    }
    
    func sub(a int, b int) (result int, err error) {
    	rtnValue := a - b
    	if rtnValue < 0 {
    		result = -999999999
    		err = errors.New("a is smaller than b")
    		return //可以这样返回值
    	}
    
    	return rtnValue, nil //传统方式的返回值
    }
    
    func addAll(a ...int) int { //...type 只能作为最后一个参数
    	sum := 0
    	for _, v := range a {
    		sum += v
    	}
    	return sum
    }
    
    func showAll(a ...interface{}) { //interface,表示可以传递所有类型的参数,使用它仍然是安全的
    	for _, v := range a {
    		switch v.(type) { //识别类型
    		case int:
    			fmt.Println(v, "is int")
    		case string:
    			fmt.Println(v, "is string")
    		case float64:
    			fmt.Println(v, "is float64")
    		case bool:
    			fmt.Println(v, "is bool")
    		default:
    			fmt.Println("other type")
    		}
    
    	}
    
    }
    

     

    以上,函数和闭包完成

  • 相关阅读:
    个体户、独资公司、有限公司、股份公司、控股公司、集团公司
    个人所得税
    移动端下拉滚动刷新
    web页面引入字体
    Flex布局
    NodeJS包管理器之Yarn
    域名、顶级域名、一级域名、二级域名、子域名
    JVM线程状态Running、Sleeping、Wait、Park、Monitor
    Java虚拟机解释器与JIT编译器
    ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
  • 原文地址:https://www.cnblogs.com/singledigit/p/6379169.html
Copyright © 2011-2022 走看看