Go菜鸟笔记:第五章 Go函数

举报
宇宙之一粟 发表于 2022/01/14 22:50:44 2022/01/14
【摘要】 为什么需要函数 函数(有些编程语言中叫做方法)几乎是每个编程语言最重要的内容,无论是函数式编程还是面向对象编程。每一段程序都由大量的函数构成,比如内置函数或者自定义函数。可以说,函数就是代码块的基本组成...

为什么需要函数

函数(有些编程语言中叫做方法)几乎是每个编程语言最重要的内容,无论是函数式编程还是面向对象编程。每一段程序都由大量的函数构成,比如内置函数或者自定义函数。可以说,函数就是代码块的基本组成部分,这本章中,我们将着重讲一下Go语言中函数的相关知识。

Go函数

因为Go语言是编译型语言,所以函数在程序中被调用的位置不是很重要。这一点注意和解释型语言(比如Python)相区分,Python的函数在调用之前必须先定义好,否则会报错。

  • 函数本质是一种类型,可以作为其他函数的参数或返回值,也可以直接调用执行。
  • Go语言支持返回多个值,并且都可以用变量接收
  • Go不是一门纯函数式的编程语言,但支持闭包
  • 函数支持可变参数

函数对于调用者而言没有区别,Go语言中有3种类型的函数:

  1. 带有标识符的函数
  2. 匿名函数或者lambda函数
  3. Go语言中的Methods(方法)

函数定义

go语言中的函数定义格式如下:

func function_name(param-list) return_datatype {
  // do something
  function-body
  return foo
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解释——函数定义的包括:函数声明关键字func、函数名、参数列表、返回类型和函数体和返回值。

这里有些是必须的,比如func关键字和函数名

函数可以无输入参数,也可以没有返回类型(默认会返回 0 )。

无参无返回类型的函数

func main() {
  hello()
}

// a simple function
func hello() {
  fmt.Println("hello() was called")
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行go run hello.go后,我们能看到如下结果:

hello()函数

有参有返回值的函数

定义一个add()函数,传入两个参数,返回两数字之和:

package main

import "fmt"

func main() {
	hello()
	fmt.Printf("3 + 4 = %d", add(3, 4))
}

// a simple function
func hello() {
	fmt.Println("hello() was called")
}

// a function with parameters and with returning value
func add(a, b int) (sum int) {

	sum = a + b
	return
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

运行然后输出结果:

hello() was called
3 + 4 = 7

  
 
  • 1
  • 2

多返回值的函数

// a function with parameters and multiple return values
func compute(a, b, c float64, name string) (float64, float64, string) {
	result1 := a + b
	result2 := a + b + c
	result3 := result1 + result2
	newName := fmt.Sprintf("%s value = %.2f", name, result3)
	return result1, result2, newName
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

多参数多返回值的函数

// a function with zero or more parameters and a return value
func add(numbers ...int) int {
	result := 0
	for _, number := range numbers {
		result += number
	}
	return result
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文章来源: blog.csdn.net,作者:宇宙之一粟,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yuzhou_1shu/article/details/103618249

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。