[Golang]func的结构与特性整理-Part 1

一、结构
func name(InputParameter-list) (OutPutResult-list) {
function body
}
InputParameter: 输入的变数
OutPutResult: 输出的变数
输出的变数,如果只有一个,可以省略()。下面有范例。

二、特性
在Go语言中,函数是一等(first-class)公民,函数类型也是一等的数据类型。

  1. 可变参数
    常用的 fmt.Println()之类的函数,就是可以接收可变长的参数。
    在类型的前面加上... (三个点)
package main

import (
	"fmt"
)

func Sum(ops ...int) int {
  sum := 0
  for _, ops := range ops {
    sum += ops
  }
  return sum
}

func main() {
  fmt.Println(Sum())
  fmt.Println(Sum(1))
  fmt.Println(Sum(1,2,3))
}

https://play.golang.org/p/JQMsgZsBOr-

  1. 多返回值
    可以用_ (下滑线),省略参数
package main

import (
	"fmt"
)

func Sum(ops ...int) (number, total int) {
  sum := 0
  num := 0
  for _, ops := range ops {
    num ++
    sum += ops
  }
  return num, sum
}

func main() {
  
  x, y := Sum()
  fmt.Println(x,y)

  _, y = Sum(1) //忽略第一个返回值
  fmt.Println(y)

  x, y = Sum(1,3,5)
  fmt.Println(x, y)
}

https://play.golang.org/p/dTYzJefJNxn

  1. 把函数当做值传递
    (函数做为值传入和函数做为返回值)
package main

import (
	"fmt"
	"errors"
)

type operate func(x, y int) int

//输入: 两个int类型的变数,和一个operate类型的参数
//输出: 一个int类型,和一个error类型的结果
func check(x int, y int, op operate) (int, error) {
	if op == nil { //检查op的参数,是不是 nil
		return 0, errors.New("Invalid")
	}
	return op(x, y), nil
}

//Sum和operate的宣告方式一致
func Sum(a, b int) int {
  return a + b
}

func main() {
	x, y := 1, 2
	op := Sum

	result, err := check(x, y, op)
	fmt.Printf("Result: %d (error: %v)\n", result, err)

	result, err = check(x, y, nil)
	fmt.Printf("Result: %d (error: %v)\n", result, err)
}

https://play.golang.org/p/3-xXDTb89t2

参考来源:

Go语言核心36讲-郝林
https://www.flysnow.org/2017/03/31/go-in-action-go-method.html


<<:  Day 31. 你以为结束了吗? 错了!今天要来回顾整个系列

>>:  【修正模型】4-2 呼叫堆叠(Call Stack)

Day08【Web】DNS 与 CDN

什麽是 DNS DNS 全称 Domain Name System 中文为「网域名称系统」, 可视为...

【Day09】Git 版本控制 - GitHub Repository

了解什麽是 GitHub 後,就来将先前新建好的 Local Repository 与 GitHub...

[DAY2] 适者生存下的环境

前言 哈罗,我是神天,一个不专业的废物.w. 欢迎大佬在下面用力的鞭打我这个不成熟的废物 昨天忘记提...

Day03 安装环境

我们昨天有提到说,Django是一个Python的框架,理所当然的我们的电脑也要有Python才能运...

Day26 了解Hook

Hook是React在16.8中增加的新功能,和过往React Component架构相比,可以帮助...