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
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/luffe/p/8540237.html
Copyright © 2011-2022 走看看