avatar

就是Van

学与不学反复横跳

  • 首页
  • 子域
  • 分类
  • 标签
  • 归档
  • 关于
首页 Go:函数
文章

Go:函数

发表于 2022/09/19 更新于 2024/01/25
作者 Gjq 4 分钟阅读

引言

本文基于Go 1.19版本。

声明

Go语言中,函数的声明由名字、形参列表、返回列表(可选)和函数体构成,注意Go对代码格式要求比较严格:

1
2
3
func name(parameter-list) (result-list) {
    body
}

声明的组成成分

函数的名字和其他名字有着同样的规则,由字母或下划线开头,后面可以跟任意数量的字符、数字和下划线,并且区分大小写。

函数的形参列表由一组变量的参数名和参数类型构成。

函数的形参变量由函数的实参的值进行初始化,为函数最外层作用域的局部变量。

函数的返回列表制定了返回值的类型和名字(可选)。如果函数的没有返回值或只有一个未命名的返回值是,返回列表的圆括号可以省略。

命名的返回值会根据变量类型初始化为相应的0值,和形参变量一样,同为函数最外层作用域的局部变量。

存在返回列表时,无论返回值有没有得到命名,函数必须显式地以return结束。如下,return不能省略:

1
2
3
4
func sub(x int, y int) (z int) {
    z = x - y
    return
}

相同类型简写

当多个形参或返回值的类型相同时,可以采用简写的方式,只写一次类型。如下的两个声明完全等价:

1
2
3
4
5
6
7
func f(i, j, k, int, s, t string ) {
    /* ... */
}

func f(i int, j int, k int, s string, t string) {
    /* ... */
}

函数签名及其等价性

函数的类型被称为函数签名,如果两个函数的形参列表和返回列表相同(形参和返回值的名称不影响),则认为两个函数的类型是相同的。如下的两个函数签名即是相同的:

1
2
3
4
5
6
7
8
func add(a int, b int) int {
    return a + b
}

func sub(x int, y int) (z int) {
    z = x - y
    return
}

无默认参数

Go语言中没有默认参数值,也不能指定实参名,因此GO语言中需要提供实参来对应函数中的每个形参,并保持调用顺序的一致。以下在Python中的语法,Go中不存在:

def func(a=2, b=3, c=5):
    return a + 2*b + 3*c


# 2+2*3+3*5 = 23
print(func())
# 1+2*3+3*5 = 22
print(func(1))
# 2+2*4+3*1 = 13
print(func(c=1, b=4, a=2))

按值传递

和C语言类似的,Go语言的实参也是按值传递的,修改函数的形参变量并不会影响被调用者提供的实参。当然,可以通过指针、slice等特定形参变量间接修改实参的变量。

无函数体的声明

Go语言中存在没有函数体的函数声明,这样的函数是由其他语言实现的:

1
2
3
package math

func Sin(x float64) float64 // 使用汇编语言实现
Language, Go
go 编程
本文由作者按照 CC BY 4.0 进行授权
分享

最近更新

  • Python中的对象
  • Go:函数
  • C语言:宏
  • DST MOD
  • Go Language With C
外部链接
  • 996.icu

文章内容

相关文章

2022/09/07

Go:Hello, 世界"

hello, world 按照惯例,我们从“hello, world”程序开始,创建helloworld.go文件如下: package main import "fmt" func main() { fmt.Println("Hello, 世界") } go run和go build 输入如下命令: go run hellworld 将会输出“Hello, 世界...

2023/09/09

Go Language With C

来自你的消息: go语言可以在linux系统上调用dll库进行编译吗 来自ChatAI的消息: 不可以直接在Linux系统上调用Windows动态链接库(DLL)库进行编译,因为Windows DLL库使用的是不同的二进制格式(PE格式),而Linux使用的是ELF格式。这意味着Linux无法直接加载和执行Windows DLL库。 然而,你可以尝试使用一些跨平台的解决方案,如cgo。c...

2023/09/20

Go: Echo库介绍

Go Go语言Echo库学习 学习背景 新项目中转Go语言开发,涉及到Web服务,而Echo是轻量级、高性能Web框架,极大提高开发效率,支持性好,功能丰富

Python中的对象

C语言:宏

© 2024 Gjq. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

编程 learn go hadoop python 大数据 cgo c语言 dst echo

发现新版本的内容。