Go 快速入门指南 - 函数

ByteWaltzX
• 阅读 718

概述

函数 是将一个或者一类问题包装为一个代码块,可以被多次调用,提高代码重用性。

Go 函数中声明、定义、参数、返回值这些基础概念,和其他编程语言中的一致,这里不再赘述。

语法规则

Go 函数支持单个返回值和多个返回值。

# 单个返回值
# 参数可省略
func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) 返回值类型 {
    // do something
}

# 多个返回值,不指定名称
# 参数可省略
func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) (返回值 1 类型, 返回值 2 类型) {
    // do something
}

# 多个返回值,指定名称
# 参数可省略
func 函数名称(参数 1 值 参数 1 类型, 参数 2 值 参数 2 类型 ...) (返回值 1 名称 返回值 1 类型, 返回值 2 名称 返回值 2 类型) {
    // do something
}

例子

单个返回值

package main

import "fmt"

func max(x, y int) int {
    if x > y {
        return x
    } else {
        return y
    }
}

func main() {
    fmt.Printf("max = %d\n", max(1, 2))
}

// $ go run main.go
// 输出如下 
/**
  max = 2
*/

多个返回值,不指定名称

package main

import "fmt"

func getNumbers() (int, int, int) {
    return 1, 2, 3
}

func main() {
    x, y, z := getNumbers()
    fmt.Printf("x = %d, y = %d, z = %d\n", x, y, z)
}

// $ go run main.go
// 输出如下 
/**
  x = 1, y = 2, z = 3
*/

多个返回值,指定名称

package main

import "fmt"

func getNumbers() (x int, y float64, z string) {
    x = 1024
    y = 3.14
    z = "hello world"
    return
}

func main() {
    x, y, z := getNumbers()
    fmt.Printf("x = %d, y = %.2f, z = %s\n", x, y, z)
}

// $ go run main.go
// 输出如下 
/**
  x = 1024, y = 3.14, z = hello world
*/

参数/返回值 类型相同简化

  • 当参数类型相同时,可以将类型放在最后一个参数变量后面
  • 当返回值类型相同时,可以将类型放在最后一个返回值变量后面
package main

import "fmt"

func getMaxAndMin(x, y, z int) (max, min int) {
    if x > y {
        max = x
        min = y
        if x < z {
            max = z
        } else if z < y {
            min = z
        }
    } else {
        max = y
        min = x
        if y < z {
            max = z
        } else if z < x {
            min = x
        }
    }
    return
}

func main() {
    max, min := getMaxAndMin(100, 200, 300)
    fmt.Printf("max = %d, min = %d\n", max, min)
}

// $ go run main.go
// 输出如下 
/**
  max = 300, min = 100
*/

扩展阅读

  1. https://zh.wikipedia.org/wiki...

联系我

Go 快速入门指南 - 函数

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
Objective
代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:!(http://static.oschina.net
Souleigh ✨ Souleigh ✨
4年前
Swift 简介
Swift和ObjectiveC的主要区别1,编程范式Swift可以面向协议编程、函数式编程、面向对象编程。Swift语言引入了协议、协议的扩展、泛型等新特性,因此使用Swift语言可以很好地面向协议编程;Swift语言将函数和闭包提升为语言的一等公民,函数可以作为一个变量、可以作为其他函数的参数、作为其他函数的返回值等来传递,所以
CuterCorley CuterCorley
4年前
C语言入门系列之7.函数的定义、参数、调用和存储类别
一、概述1.函数基本概念一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能,子程序由函数来完成。一个C程序可由一个主函数和若干个其他函数构成。函数间的调用关系可能如下:由主函数调用其他函数,其他函数也可以互相调用,同一个函数可以被一个或多个函数调用任意多次。简单测试如下:cinclude
科工人 科工人
4年前
Go语言学习——彻底弄懂return和defer的微妙关系
疑问前面在函数篇里介绍了Go语言的函数是支持多返回值的。只要在函数体内,对返回值赋值,最后加上return就可以返回所有的返回值。最近在写代码的时候经常遇到在return后,还要在defer里面做一些收尾工作,比如事务的提交或回滚。所以想弄清楚这个return和defer到底是什么关系,它们谁先谁后,对于最后返回值又有什么影响呢?动手验证了解
Stella981 Stella981
3年前
OC中block使用相关
代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:!(http://static.oschina.net
Wesley13 Wesley13
3年前
Mysql自定义函数(function)
语法自定义函数也需要相应的要求,语法如下:_CREATEFUNCTION__<函数名称(参数列表)__RETURNS返回值类型_  函数体删除:_DROP__FUNCTION <函数名称_调用自定义函数语法:_SELECT <函数名称(paramet
Wesley13 Wesley13
3年前
C# 方法
一、简介方法可以称为函数,函数又可以称为方法,方法主要的作用是将一堆代码进行重用的一种机制,避免太多的冗余的代码,还有方便后期维护。二、语法函数的语法:publicstatic返回值类型方法名(参数列表){方法体;}  描述:public
Wesley13 Wesley13
3年前
go 的匿名函数和闭包
匿名函数匿名函数是指不需要定义函数名的一种函数实现方式。在Go语言中,函数可以像普通变量一样被传递或使用,这与C语言的回调函数比较类似。不同的是,Go语言支持随时在代码里定义匿名函数。匿名函数由一个不带函数名的函数声明和函数体组成,如下所示:!(https://
Wesley13 Wesley13
3年前
JAVA自学笔记05
JAVA自学笔记051、方法1)方法就是完成特定功能的代码块,类似C语言中的函数。2)格式:修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2,…){函数体;return返回值;}①修饰符:对于初学者使用publicstatic②返回值类型:方法结果的类型③方
Wesley13 Wesley13
3年前
Go 函数方法
   在Go语言中,函数和方法不太一样,有明确的概念区分。其他语言中,比如PHP函数就是方法,方法就是函数,但在Go语言中,函数是不属于任何结构体、类型的方法,也就是说函数是没有接收者的;而方法是有接收者的,我们所说的方法要么属于一个结构体的,要么属于一个新定义的类型的函数函数和方法,虽然概念不同,但是定义非常相似
小万哥 小万哥
1年前
C 语言函数完全指南:创建、调用、参数传递、返回值解析
C语言中的函数函数是一段代码块,只有在被调用时才会运行。您可以将数据(称为参数)传递给函数。函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。预定义函数事实证明,您已经知道什么是函数了例如,main()是一个函数,用于执行代码,pri