大家好,今天将梳理出的 Go语言函数用法内容,分享给大家。 请多多指教,谢谢。

本次《Go语言函数使用》内容共分为三个章节,本文为第一章节。

  • Golang 基础之函数使用 (一)
  • Golang 基础之函数使用 (二)
  • Golang 基础之函数使用 (三)


本章节内容

  • 函数介绍
  • 函数特点
  • 函数声明
  • 传参方式
  • 不定参数传值
  • 任意参数类型的不定参数
  • 返回值


函数介绍

为了完成某一功能的程序指令(语句)的集合,称为函数。

Go 语言的函数可以分为:自定义函数和系统函数。Go 语言函数与其他语言函数最大的不同是,Go 语言的函数可以支持返回任意多个值,而其他语言的函数一般只支持返回一个值。

比如C语言函数返回值只能是一种类型。

Go 语言的函数也支持普通函数、匿名函数和闭包三种形式。


函数特点

  • 无需声明原型
  • 支持不定变参
  • 支持多返回值
  • 支持命名返回参数
  • 支持匿名函数和闭包 (变向的高阶函数)
  • 函数也是一种类型,一个函数可以赋值给变量
  • 不支持嵌套 (nested) 一个包不能有两个名字一样的函数
  • 不支持重载 (overload)
  • 不支持默认参数 (default parameter)


函数声明

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。


传参方式

值传递

指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。


引用传递

是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

无论是值传递,还是引用传递,传递给函数的都是变量的副本,不过,值传递是值的拷贝。
引用传递是地址的拷贝,一般来说,地址拷贝更为高效。而值拷贝取决于拷贝的对象大小,对象越大,则性能越低。

map、slice、chan、指针、interface默认以引用的方式传递。


不定参数传值

函数的参数不是固定,后面的类型是固定的。 (可变参数)

golang可变参数本质上就是slice。

arg[index]len(arg)


使用slice对象做变参时,必须展开。

输出结果


任意类型的不定参数

函数的参数和每个参数的类型都不是固定的。

interface{}interface{}


返回值

_

Go 的返回值可以被命名, 返回值的名称应当具有一定意义。

没有参数的 return 语句返回各个返回变量的当前值,这种用法被称作“裸”返回。


技术文章持续更新,请大家多多关注呀~~