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

     

    以上,函数和闭包完成

  • 相关阅读:
    计算机网络
    二叉树
    队列
    百度脑图-离线版(支持Linux、Mac、Win)
    nested exception is java.lang.NoClassDefFoundError: javax/xml/soap/SOAPElement
    手写注解实现SpringMVC底层原理(虽简单却五脏俱全《注重思路》)
    java异常
    JVM相关
    redis相关总结
    mysql 数据库相关
  • 原文地址:https://www.cnblogs.com/singledigit/p/6379169.html
Copyright © 2011-2022 走看看