Golang- GO语言学习笔记之函数

目录

函数

一个函数多个返回值

函数多个返回值用来返回错误,防止程序中断

函数式编程

函数作为参数

可变参数列表


函数

  • 函数可以返回多个值
  • 函数返回多个值时还可以起名字
  • 仅用于非常简单的函数
  • 对于调用者而言没有区别
  • 函数的返回值写在最后面
  • 可以返回多个值
  • 函数可以作为参数
  • 没有默认参数,可选参数(没有重载)
package main

import "fmt"
func eval(a, b int, op string) int{
	switch op {
	case "+":
		return a + b
	case "-":
		return a - b
	case "*":
		return a * b
	case "/":
		return a / b
	default:
		panic("unsupported operation: " +op)
	}
}

func main() {
	fmt.Println(eval(3, 4, "*"))
}

一个函数多个返回值

// 一个函数返回多个值
// 15 / 4 =3...3
func div(a, b int) (int, int){
	return a/b, a%b
}

一个函数返回多个值(改良版)

// 15 / 4 =3...3
func div(a, b int) (q, r int){
	return a/b, a%b  // 建议使用,return 计算,这样变量多不怕混淆
}

func main() {
	q, r := div(15, 4)
}

函数多个返回值用来返回错误,防止程序中断

一个函数返回多个值不要随便用,一般用来返回错误,防止程序中断

package main

import (
	"fmt"
)

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 "/":
		q, _ := div(a, b) //用 _ 代替不需要使用的变量,防止变量没 有使用编译报错
		return q, nil
	default:

		return 0, fmt.Errorf("unsupported operation: %s", op)
	}
}
func main() {
	if result, err :=eval(15, 4, "X"); err!=nil{
		fmt.Println("Error: ", err)
	}else {
		fmt.Println(result)
	}
}

函数式编程

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)))
}
fmt.Println(apply(pow, 3, 4))

函数作为参数

fmt.Println(apply(func(a, b int) int{
		return int(math.Pow(float64(a),float64(b)))
	},3,4))  //调用匿名函数

可变参数列表

// 可变参数列表
func sum(numbers ...int) int{
	sum := 0
	for i := range numbers  {
		sum += numbers[i]
	}
	return sum
}

 

你可能感兴趣的:(GO)