引入

【1】为什么要使用函数:
提高代码的复用型,减少代码的冗余,代码的维护性也提高了

【2】函数的定义:
为完成某一功能的程序指令(语句)的集合,称为函数。

【3】基本语法

func   函数名(形参列表)(返回值类型列表){执行语句..return + 返回值列表
}

【4】函数的定义和函数的调用案例:

package main
import "fmt"
// func   函数名(形参列表)(返回值类型列表){//  执行语句..
//  return + 返回值列表
// }
//自定义函数:功能:两个数相加:
func cal (num1 int,num2 int) (int) { //如果返回值类型就一个的话,那么()是可以省略不写的var sum int = 0sum += num1sum += num2return sum
}
func main(){//功能:10 + 20//调用函数:sum := cal(10,20)fmt.Println(sum)// var num1 int = 10// var num2 int = 20//求和:// var sum int = 0// sum += num1// sum += num2// fmt.Println(sum)//功能:30 + 50var num3 int = 30var num4 int = 50//调用函数:sum1 := cal(num3,num4)fmt.Println(sum1)//求和:// var sum1 int = 0// sum1 += num3// sum1 += num4// fmt.Println(sum1)
}

函数使用细节一:形参、返回值

【1】函数:
对特定的功能进行提取,形成一个代码片段,这个代码片段就是我们所说的函数
【2】函数的作用:提高代码的复用性
【3】函数和函数是并列的关系,所以我们定义的函数不能写到main函数中
【4】基本语法

func   函数名(形参列表)(返回值类型列表){执行语句..return + 返回值列表
}

(1)函数名:
遵循标识符命名规范:见名知意 addNum,驼峰命名addNum
首字母不能是数字
首字母大写该函数可以被本包文件和其它包文件使用(类似public)
首学母小写只能被本包文件使用,其它包文件不能使用(类似private)

(2)形参列表:
形参列表:个数:可以是一个参数,可以是n个参数,可以是0个参数
形式参数列表:作用:接收外来的数据
实际参数:实际传入的数据

(3)返回值类型列表:函数的返回值对应的类型应该写在这个列表中
返回0个:

返回1个:

返回多个:

函数使用细节二:内存分析

【5】通过例题感受内存分析:

package main
import "fmt"
//自定义函数:功能:交换两个数
func exchangeNum (num1 int,num2 int){ var t intt = num1num1 = num2num2 = t
}
func main(){    //调用函数:交换10和20var num1 int = 10var num2 int = 20fmt.Printf("交换前的两个数: num1 = %v,num2 = %v \n",num1,num2)exchangeNum(num1,num2)fmt.Printf("交换后的两个数: num1 = %v,num2 = %v \n",num1,num2)
}

内存分析:

函数使用细节三:不支持重载

【6】Golang中函数不支持重载

【7】Golang中支持可变参数 (如果你希望函数带有可变数量的参数)

package main
import "fmt"
//定义一个函数,函数的参数为:可变参数 ...  参数的数量可变
//args...int 可以传入任意多个数量的int类型的数据  传入0个,1个,,,,n个
func test (args...int){//函数内部处理可变参数的时候,将可变参数当做切片来处理//遍历可变参数:for i := 0; i < len(args); i++ {fmt.Println(args[i])}
}
func main(){    test()fmt.Println("--------------------")test(3)fmt.Println("--------------------")test(37,58,39,59,47)
}

【8】基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。

【9】以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果来看类似引用传递。

函数使用细节四:函数也是一种数据类型

【10】在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。

package main
import "fmt"
//定义一个函数:
func test(num int){fmt.Println(num)
}
func main(){//函数也是一种数据类型,可以赋值给一个变量   a := test//变量就是一个函数类型的变量fmt.Printf("a的类型是:%T,test函数的类型是:%T \n",a,test)//a的类型是:func(int),test函数的类型是:func(int)//通过该变量可以对函数调用a(10) //等价于  test(10)
}

【11】函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用
(把函数本身当做一种数据类型)

package main
import "fmt"
//定义一个函数:
func test(num int){fmt.Println(num)
}
//定义一个函数,把另一个函数作为形参:
func test02 (num1 int ,num2 float32, testFunc func(int)){fmt.Println("-----test02")
}
func main(){//函数也是一种数据类型,可以赋值给一个变量   a := test//变量就是一个函数类型的变量fmt.Printf("a的类型是:%T,test函数的类型是:%T \n",a,test)//a的类型是:func(int),test函数的类型是:func(int)//通过该变量可以对函数调用a(10) //等价于  test(10)//调用test02函数:test02(10,3.19,test)test02(10,3.19,a)
}

【12】为了简化数据类型定义,Go支持自定义数据类型
基本语法: type 自定义数据类型名 数据类型
可以理解为 : 相当于起了一个别名
例如:type mylnt int -----》这时mylnt就等价int来使用了.

例如:type mySum func (int , int) int -----》这时mySum就等价一个函数类型func(int, int) int

【13】支持对函数返回值命名
传统写法要求:返回值和返回值的类型对应,顺序不能错

升级写法:对函数返回值命名,里面顺序就无所谓了,顺序不用对应

go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名相关推荐

  1. golang的基本数据类型和数组默认都是值传递的

    基本数据类型和数组默认都是值传递的,即进行值拷贝.在函数内修改,不会影响到原来的值. 以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式 ...

  2. day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  3. day02--java基础编程:变量,数据类型,类型转换,运算规则,Scanner,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  4. 内核中的kmalloc函数详解

    一.kmalloc函数详解 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是 ...

  5. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  6. python average函数详解_python基础之函数详解

    Python基础之函数详解 一.函数的定义 到现在为止,我们已经掌握了Python的基本语法和数据类型等相关基础知识了,以进行一个项目的编写了,这个时候,就会发现,很多代码需要我们进行复制粘贴,这简直 ...

  7. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  8. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  9. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

最新文章

  1. 打分矩阵Scoring Matrices
  2. USTC服务器使用笔记
  3. Vue实现仿音乐播放器项目总述以及阶段目录
  4. 关于施加在 div 标签上的 ngTemplateOutlet 指令让 div class 丢失的问题调试
  5. mysql 索引:类型 、创建
  6. pythonの鉴黄之路(二)——图片转base64码
  7. Batch批量替换hosts
  8. 【BZOJ2844】albus就是要第一个出场,线性基
  9. odbc如何连oracle数据库,不安装Oracle如何连数据库(odbc驱动)
  10. Welcome to Xiao
  11. Android基础入门教程——4.4.2 ContentProvider再探——Ducument Provider
  12. 程序员超实用网站,留着总有用的着的时候
  13. 使用OpenResty达到十万级并发超高性能Web应用(一):HelloWorld
  14. 作业Android自我介绍
  15. 第五讲—按键控制LED
  16. 我的Blog东一个西一个!
  17. 流量分析:如何分析数据的波动?
  18. 学计算机基础word题,大学计算机基础word练习题及详解答案.doc
  19. Object自动排序的问题
  20. 修改3389远程端口号

热门文章

  1. unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...
  2. 趣学python3(19)-函数-Lambda
  3. 【数据竞赛】Kaggle秘技,用Sigmoid函数做回归问题!
  4. 专家票选! 2020 年度 10 篇人工智能经典论文(6-10)
  5. 【NLP】Pytorch中文语言模型bert预训练代码
  6. 【TF-IDF】传统方法TF-IDF解决短文本相似度问题
  7. 最常用的决策树算法(二)Random Forest、Adaboost、GBDT 算法
  8. 推荐Datawhale整理的秋招求职攻略
  9. 巨头拼杀下的IM市场,网易云信如何站上终极对决?
  10. 如何快速实现移动端短视频功能?