Golang语言社区--【基础知识】函数

函数是一组一起执行任务的语句。每Go程序具有至少一个函数,它一般是main(),以及所有的最琐碎程序可以定义附加函数。

你可以将代码放到独立的功能。如何划分代码之间的不同功能,但逻辑上的划分通常是让每个函数执行特定的任务。

函数声明告诉编译器有关的函数的名称,返回类型和参数。一个函数定义提供了函数的实际主体。

Go语言标准库提供了大量的内置函数,在程序可以调用。例如,函数len()需要不同类型的参数和返回值的类型的长度。例如,如果一个字符串传递给它,它会返回字符串的长度以字节为单位,如果一个数组传递给它,它就会返回数组的长度为它所拥有元素的个数。

函数称为具有各种名字等的方法或子例程或程序等。

定义一个函数:

在Go编程语言的函数定义的一般形式如下:

func function_name( [parameter list] ) [return_types]
{
   body of the function
}

在Go编程语言中的函数定义由函数头和函数体。这里是一个函数的所有部分:

  • func 开始函数的声明。
  • Function Name: 这是该函数的实际名称。函数名和参数列表一起构成了函数签名。
  • Parameters: 参数是像一个占位符。当调用一个函数,你传递一个值的参数。这个值被称为实际参数或参数。参数列表指的类型,顺序和数量的函数的参数。参数是可选的;也就是说,一个函数可包含任何参数。
  • Return Type: 函数可能返回值的列表。return_types是该函数返回值的数据类型的列表。有些函数执行所需的操作没有返回值。在这种情况下,return_type不是必需的。
  • Function Body: 函数体包含了定义函数操作语句的集合。

例子:

下面是一个函数的源代码称为max()。这个函数有两个参数num1与num2并返回两者之间的最大值:

/* function returning the max between two numbers */
func max(num1, num2 int) int
{
   /* local variable declaration */
   result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

调用一个函数:

创建一个Go编程的函数必须做一个定义。要使用函数,需要调用该函数来执行规定的任务。

当程序调用函数,程序控制被转移到所调用的函数。调用函数定义执行任务时,被执行的return语句或达到其功能结束的右括号,则返回程序控制返回到主程序。

要调用一个函数,只需要通过必要的参数以及函数的名称,如果函数返回一个值,那么可以存储返回值。例如:

保持max()函数与main()函数并编译源代码。在运行最后的可执行文件,它会产生如下结果:

Max value is : 200

从函数返回多个值

Go语言函数可以返回多个值。例如:

函数参数:

如果一个函数使用参数,它必须声明接受的参数值的变量。这些变量被调用的函数的形式参数。

正式的参数表现得就像在函数内部其他本地变量并且在进入函数创建和退出时销毁。

当调用一个函数,有一些参数可以传递给函数,有两种方法:

调用类型

描述

按值调用

这种方法复制一个参数的实际值到函数的形式参数。在这种情况下,参数在函数内变化对参数没有影响

参考调用

这种方法复制一个参数的地址复制到形式参数。在函数里边,地址是用来访问调用中使用的实际参数。这意味着,对参数的更改会影响参数

默认情况下,Go使用按值调用传递参数。在一般情况下,这意味着一个函数中的代码不能改变用来调用该函数的参数和上面提到的例子,而调用max()函数中使用同样的方法。

函数用途:

函数用途

描述

函数作为值

函数可以运行创建并且可以被用作值

闭包函数

函数闭合是匿名的函数,可以在动态编程中使用

方法

方法是用一个接收器的特殊功能

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

java提高篇之关键字static

在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员...

922
来自专栏我的博客

PHP技术点A

1、合并数组(array_merge和+的区别) array_merge如果两个数组存在相同的key,后面的会覆盖前面的 备注:如果是数字索引,则不会覆盖,...

34310
来自专栏大闲人柴毛毛

稳扎稳打JavaScript(三)——创建对象的几种方式

有了前面两篇文章的基础后,我们来谈一谈在JS中创建对象的几种方式。 建议大家先预习下先前的两篇博客: 稳扎稳打JavaScript(一)——作用域链 ...

4454
来自专栏海天一树

小朋友学Python(11):变量类型

Python 定义了一些标准类型,用于存储各种类型的数据。 Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表)...

42514
来自专栏我和我大前端的故事

啊,函数呐!!!

一份需要你补充完整的函数导图!我还是一个初学者,这篇文章是我所知道的所有关于函数的知识,如有不完善或者错误,希望能够在评论下方指出,哈哈哈,大神勿喷。

892
来自专栏java初学

final和static关键字

36211
来自专栏运维技术迷

PHP-函数

创建函数的语法 //function创建函数的关键字 function functionName() { 要执行的代码; } 函数准则 函数的名称应该显示出他的...

3267
来自专栏小白的技术客栈

Python运算符

今天开始讲解Python的运算符,这一节比较简单,知识点不多。 上文回顾 今天回顾一下昨天的文章主要讲了哪些知识点: Python是一门动态的强类型语言; 变量...

5058
来自专栏从零开始学 Web 前端

从零开始学 Web 之 JS 高级(三)apply与call,bind,闭包和沙箱

不同的是传入参数时,apply 有两个参数,第二个参数是数组;call 从第二个参数开始是调用其的函数的所有参数。

963
来自专栏chenjx85的技术专栏

leetcode-594-Longest Harmonious Subsequence

1845

扫码关注云+社区

领取腾讯云代金券