zoukankan      html  css  js  c++  java
  • go_函数

    函数语法要点

    返回值类型写在最后面

    可返回多个值

    函数可作为参数

    没有默认参数,可选参数,只有可变参数列表(...int)

    package main
    
    import (
    	"fmt"
    	"reflect"
    	"runtime"
    	"math"
    )
    
    func eval(a,b int, op string) (int,error){
    	switch op{
    	case "+":
    		return a+b,nil
    	case "-":
    		return a-b,nil
    	case "*":
    		return a*b,nil
    	case "/":
    		//result = a/b
    		//两个返回值中取其中一个返回值
    		q,_ :=div(a,b)
    		return q,nil
    	default:
    		return 0,fmt.Errorf(
    			"unsupported operation %s	",op,
    		)
    	}
    }
    
    //返回多个值
    func div(a,b int) (q,r int){
    	//q = a / b
    	//r = a % b
    	//return
    	return a / b, a % b
    }
    
    //函数里面的参数可以时函数
    func apply(op func(int, int) int,  a, b int) int {
    	p:=reflect.ValueOf(op).Pointer()//获取函数的指针
    	opName:=runtime.FuncForPC(p).Name()
    	fmt.Printf("Calling function %s with args" +
    	"(%d,%d)
    ",opName,a,b)
    	return op(a,b)
    }
    
    func pow(a,b int) int {
    	return  int(math.Pow(float64(a),float64(b)))
    }
    
    func sum(numbers ...int) int{
    	s := 0
    	for i := range numbers{
    		s += numbers[i]
    	}
    	return s
    }
    func main() {
    	//fmt.Println(
    	//	eval(3,4,"x"),
    	//)
    	//q,r :=div(13,3)
    	//fmt.Println(q,r)
    
    	fmt.Println(apply(func(a int, b int) int {
    		return int(math.Pow(float64(a),float64(b)))
    	},3,4))
    	fmt.Println(apply(pow,3,4))
    	fmt.Println(sum(1,2,3,4,5))
    }
    

      闭包函数保存并积累其中的变量的值,不管外部函数退出与否,它都能够继续操作外部函数中的局部变量。

    package main
    
    import "fmt"
    
    func main() {
    	var f = Adder()
    	fmt.Print(f(1), " - ")
    	fmt.Print(f(20), " - ")
    	fmt.Print(f(300))
    }
    
    func Adder() func(int) int {
    	var x int
    	return func(delta int) int {
    		x += delta
    		return x
    	}
    }
    

      

    输出:

    1 - 21 - 321
  • 相关阅读:
    nginx防盗链配置
    nginx禁止非sever_name指定域名访问
    linux下配置python环境 django创建helloworld项目
    node解析修改ngix配置文件
    ~/.ssh/config文件的使用
    SpringCloud-Feign声明式服务调用
    Hystrix 配置参数全解析
    Eureka 的高级使用
    eureka中显示有服务但是通过ribbon调用显示No instances available for service-hello的问题
    EureKa:服务注册与发现
  • 原文地址:https://www.cnblogs.com/luffe/p/8540237.html
Copyright © 2011-2022 走看看