Golang教程:函数

函数是完成一个特定任务的代码块。一个函数接受输入,对输入进行一些运算并产生输出。

函数声明

在 Go 中声明一个函数的语法为:

func functionname(parametername type) returntype {
 //function body
}

函数声明以关键字 func 开头,后面是函数名字,接着是在 ( 和 ) 之间指定的参数列表,然后是函数的返回类型。指定参数的语法为参数名称后面跟着参数类型。可以指定任意数量的参数,形式为: (parameter1 type, parameter2 type)。最后是由 { 和 } 以及它们之间的代码块组成的函数体。

在一个函数中,参数和返回值是可选的。因此下面的语法也是合法的函数声明:

func functionname() {
}

函数的例子

让我们写一个函数,它以单个产品的价格和产品数量作为输入参数,并以总价格(单个产品的价格与产品数量的乘积)作为返回值。

func calculateBill(price int, no int) int {
    var totalPrice = price * no
    return totalPrice
}

上面的函数接受两个 int 类型的输入参数:price 和 no,并返回 totalPriceprice 与 no 的乘积) 。返回值的类型也是 int

如果连续的参数具有相同的类型,我们可以避免每次都写出它们的类型,只需要在结束的时候写一次就可以了,比如:price int, no int 可以写成:price, no int。 于是上面的函数可以写成:

func calculateBill(price, no int) int {
    var totalPrice = price * no
    return totalPrice
}

我们已经定义好了我们函数,现在让我们在代码中调用它。调用函数的语法为:functionname(parameters)。上面定义的函数 calculateBill 可以通过下面的代码调用:

calculateBill(10, 5)

下面是完整的程序,它调用 calculateBill 并计算总价格。

package main

import (
    "fmt"
)

func calculateBill(price, no int) int {
    var totalPrice = price * no
    return totalPrice
}
func main() {
    price, no := 90, 6
    totalPrice := calculateBill(price, no)
    fmt.Println("Total price is ", totalPrice)
}

多个返回值

一个函数可以返回多个值。让我们写一个函数 rectProps,它接受一个矩形的长和宽,并返回该矩形的面积和周长。矩形的面积为长与宽的积。周长为长与宽的和的 2 倍。

package main

import (
    "fmt"
)

func rectProps(length, width float64)(float64, float64) {
    var area = length * width
    var perimeter = (length + width) * 2
    return area, perimeter
}

func main() {
     area, perimeter := rectProps(10.8, 5.6)
    fmt.Printf("Area %f Perimeter %f", area, perimeter)
}

如果一个函数有多个返回值,那么这些返回值应该用小括号()括起来,比如:func rectProps(length, width float64)(float64, float64) 接受两个类型为 float64 的参数(length 和 width),并且同样返回两个类型为 float64 的返回值。上面程序的输出为:Area 60.480000 Perimeter 32.800000

具名返回值

可以给一个函数的返回值指定名字。如果指定了一个返回值的名字,则可以视为在该函数的第一行中定义了该名字的变量。

上面的 rectProps 函数可以用具名返回值的形式重写如下:

func rectProps(length, width float64)(area, perimeter float64) {
    area = length * width
    perimeter = (length + width) * 2
    return //no explicit return value
}

在上面的函数中,area 和 perimeter 是具名返回值。注意 return 语句没有指定任何返回值。因为在函数声明时已经指定area 和 perimeter 是返回值,在遇到 return 语句时它们会自动从函数中返回。

空指示符

在 Go 中,下划线(_)表示空指示符(blank identifier)。它可以用于代替任何类型的任何值。让我们看看如何使用空指示符。

我们知道上面定义的函数 rectProps 返回矩形的面积(area)和周长(perimeter)。如果我们只需要获取 area 而想要忽略 perimeter该怎么办呢?这时候就可以使用空指示符。

下面的程序仅接收 rectProps 返回的 area

package main

import (
    "fmt"
)

func rectProps(length, width float64) (float64, float64) {
    var area = length * width
    var perimeter = (length + width) * 2
    return area, perimeter
}
func main() {
    area, _ := rectProps(10.8, 5.6) // perimeter is discarded
    fmt.Printf("Area %f ", area)
}

在 area, _ := rectProps(10.8, 5.6) 这一行,我们仅仅获取了 area,而使用空指示符 _ 来忽略第二个返回值(perimeter)。

原文地址:https://www.cnblogs.com/liuzhongchao/p/9158811.html

时间: 2024-07-31 00:40:32

Golang教程:函数的相关文章

JavaScript强化教程——函数参数

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 -- 函数参数 JavaScript 函数参数 JavaScript 函数对参数的值(arguments)没有进行任何的检查. 函数显式参数与隐藏参数(arguments) 在先前的教程中,我们已经学习了函数的显式参数: functionName(parameter1, parameter2, parameter3) {     code to be executed } 函数显式参数在函数定义时列出.

golang的函数

在golang中, 函数是第一类值(first-class object), 即函数可以赋值与被赋值. 换言之, 函数也可以作为ReceiverType, 定义自己的method. 实例: http.HandleFunc(pattern string, handler func(ResponseWriter, *Request)) 就是使用上述思想实现. type HandlerFunc func(ResponseWriter, *Request) func (f HandlerFunc) Se

Golang理解-函数变量

函数变量 函数作为变量值 函数变量是把函数作为值保存到变量中. 在Golang中,,函数也是一种类型,可以和其他类型一样被保存在变量中.例如: package main // 将函数作为值保存到变量中 import ( "fmt" ) func fire() { fmt.Println("fire") } func main(){ f := fire() // 将变量f声明为func()类型,此时f就被俗称为"回调函数", 此时f的值为nil f

golang(06)函数介绍

原文链接 http://www.limerence2017.com/2019/09/11/golang11/#more 函数简介 函数是编程语言中不可缺少的部分,在golang这门语言中函数是一等公民.也是使用好golang的必备技能.看下golang函数的格式 123 func 函数名(函数参数)返回值类型{ } 一个简单的函数 123 func HelloFunc(str string) string{ return str} 该函数返回传入的字符串,函数调用如下 1 fmt.Println

Visual Basic快捷教程——函数与子程序

函数是结构化程序设计的基础.可以拿现实生活中的"社会分工"这个概念来做类比.假设做包子只需要用到两种原料:一是用来做包子皮的面粉,另外就是用来做包子馅料的猪肉.作为一名专门做包子的厨师,你当然不能自己生产面粉和猪肉,所以你通常会从磨坊直接购买面粉,从肉铺直接购买猪肉.在这两种原料都具备的时候,你的任务仅仅只是负责做包子.更进一步,你还可以假设磨坊只负责把麦子磨成面粉,而不负责种植麦子,种植麦子的工作则有农民专门负责.对于做包子的厨师来说,他把生产面粉和猪肉这两项工作承包给了磨坊和肉铺,

Golang泛型函数

目前,golang还不支持模板函数(类型参数化),所以看上去不得不为每一种类型都实现一个函数.但是Golang可以利用空接口interface{}和闭包/高阶函数来实现泛型函数. 1 空接口 空接口interface{}是指方法集为空的接口,任何类型的值都可以赋值给空接口.接口相关内容请参见另一篇博客<Golang中的接口> // interface{} func minimum(first interface{}, rest ...interface{}) interface{} {    

Golang tips ----- 函数

1.在函数调用时,Golang没有默认参数值 2.一个函数声明如果没有函数体,表面该函数不是由Golang实现的,这样的声明定义了函数标识符 3.拥有函数名的函数只能在包级语法块中被声明 4.函数值(闭包)属于引用类型并且不可比较 5.在循环中生成的所有函数值共享相同的循环变量,并且需要注意的是,函数值记录的是循环变量的地址,而不是循环变量某一刻的值.如果函数值都在循环结束运行的话,那对于循环变量,每个函数对应的都是相同的值.如下面的代码所示,最后迭代运行函数切片,输出的都将是相同的值5.因为它

[golang note] 函数定义

普通函数定义 √ golang函数基本组成:关键字func.函数名.参数列表.返回值.函数体和返回语句. • 语法如下 func 函数名(参数列表) (返回值列表) { // 函数体 } • 示例如下 package main import "fmt" import "errors" func Add(a int, b int) (ret int, err error) { if a < 0 || b < 0 { // 假定只支持两个非负数字的加法 er

Golang教程:变量

声明单一变量 声明一个变量的语法为:var name type,例如 package main import "fmt" func main() { var age int // variable declaration fmt.Println("my age is", age) } 语句 var age int 声明了一个类型为 int,名称为 age 的变量.在这里我们没有给它赋任何值.如果一个变量没有被赋予任何值,Go 会自动将这个变量初始化为其类型的 0值,