1 定义格式

函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

Go 语言函数定义格式如下:

  1. func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) {
  2. //函数体
  3.  
  4. return v1, v2 //返回多个值
  5. }

函数定义说明:

  • func:函数由关键字 func 开始声明
  • FuncName:函数名称,根据约定,函数名首字母小写即为private,大写即为public
  • 参数列表:函数可以有0个或多个参数,参数格式为:变量名 类型,如果有多个参数通过逗号分隔,不支持默认参数
  • 返回类型:

    ① 上面返回值声明了两个变量名o1和o2(命名返回参数),这个不是必须,可以只有类型没有变量名

    ② 如果只有一个返回值且不声明返回值变量,那么你可以省略,包括返回值的括号

    ③ 如果没有返回值,那么就直接省略最后的返回信息

    ④ 如果有返回值, 那么必须在函数的内部添加return语句

2 自定义函数

2.1 无参无返回值

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. //无参无返回值函数定义
  6.  
  7. func MyFunc(){
  8. a :=
  9. fmt.Println("a = ", a)
  10. }
  11.  
  12. func main(){
  13. // 无参无返回值函数的调用,函数名()
  14. MyFunc()
  15. }

2.2 有参无返回值

2.2.1 普通参数列表

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // 有参无返回值函数的定义, 普通参数列表
  6. // 定义函数时,在函数后面()定义参数为形参
  7. // 参数传递,只能由实参传递给形参,不能反过来,单向传递
  8. func MyFunc1(a int){
  9. fmt.Println("a = ", a)
  10. }
  11.  
  12. func MyFunc2(a int, b int){
  13. fmt.Printf("a = %d, b = %d\n", a, b)
  14. }
  15.  
  16. func MyFunc3(a, b int){
  17. fmt.Printf("a = %d , b = %d \n", a, b)
  18. }
  19.  
  20. func MyFunc4(a int, b string, c float64){
  21.  
  22. }
  23.  
  24. func MyFunc5(a, b string, c float64, d, e bool){
  25.  
  26. }
  27.  
  28. func main(){
  29. // 有参无返回值函数调用: 函数名(所需参数)
  30. // 调用函数传递的参数叫实参
  31. MyFunc1()
  32. MyFunc2(, )
  33. }

2.2.1 普通参数列表

1) 不定参数类型

不定参数是指函数传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. // ...int这样的类型, ...type 不定参数类型
  6. // Python中使用*args,**kwargs
  7. func MyFunc01(args ...int){ //传递的实参可以是0或者多个
  8. fmt.Println("len(args) = ", len(args)) //获取用户传递参数的个数
  9. ; i<len(args); i++{
  10. fmt.Printf("args[%d] = %d\n", i , args[i])
  11. }
  12.  
  13. fmt.Println("=================================================")
  14.  
  15. for i, data := range args{
  16. fmt.Printf("args[%d] = %d\n", i, data)
  17. }
  18. }
  19.  
  20. //固定参数一定要传参,不定参数根据需求传递
  21. func MyFunc03(a int, args ...int){
  22.  
  23. }
  24.  
  25. //注意,不定参数,一定(只能)放在形参中的最后一个参数
  26. //func MyFunc04(args ...int, a int){
  27. // }
  28.  
  29. func main(){
  30. MyFunc01(,,)
  31. }

Go函数篇的更多相关文章

  1. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  2. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  3. Python函数篇(7)-正则表达式

    1.正则表达式   正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供了基础,简单的来说,正则表达式是由一些字符和特殊符号组成的字符串.Python通过标准库中的re模块来支持正 ...

  4. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  5. C语言函数篇(二)函数参数基础设计

    形参实现一种数据传入的接口 ,由 实参 拷贝给 形参. 拷贝!!!!!!!!!!! 例1: void func(int tmp){ //意图是实现传进来的参数 +1 tmp++; } int mian ...

  6. 30s源码刨析系列之函数篇

    前言 由浅入深.逐个击破 30SecondsOfCode 中函数系列所有源码片段,带你领略源码之美. 本系列是对名库 30SecondsOfCode 的深入刨析. 本篇是其中的函数篇,可以在极短的时间 ...

  7. 《前端之路》- TypeScript(二) 函数篇

    目录 一.定义函数方法 二.定义函数传参 三.可选传参 四.默认传参 五.传递剩余参数 六.函数重载 七.箭头函数 八.总结 一.定义函数方法 在 es5 中定时函数的方法有 命名函数和函数表达式(匿 ...

  8. JavaScript进阶之高阶函数篇

    JavaScript进阶之高阶函数篇 简介:欢迎大家来到woo爷说前端:今天给你们带来的是JavaScript进阶的知识,接下来的系列都是围绕着JavaScript进阶进行阐述:首先我们第一篇讲的是高 ...

  9. 通过实战理解C语言精要——函数篇

      前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...

  10. Python函数篇(3)-内置函数、文件处理

    1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...

随机推荐

  1. Linux /proc/$pid部分内容详解【转】

    转自:https://www.cnblogs.com/likui360/p/6181927.html auxv /proc/[pid]/auxv包含传递给进程的ELF解释器信息,格式是每一项都是一个u ...

  2. 百度云人脸识别API人脸对比

    from urllib import request import base64 import requests import re import json import urllib import ...

  3. 07.进程管理+作业控制+文件查找与压缩+文件压缩与打包+tar打包解包+NFS

    进程管理 程序放在磁盘上叫文件,把它复制到内存,并在cpu运行,就叫进程, 进程多少也反映当前运行程序的多少 进程在系统中会为每个进程生成一个进程号,在所有的进程中有一个特殊进程即init进程, 它是 ...

  4. DVWA之CSRF

    CSRF:跨站请求伪造攻击 Security:Low 级别分析 核心代码 输入数据,以便Burp代理获得请求参数        这里可以将第一行拿出来进行构造链接, http://202.100.10 ...

  5. html5 localStorage讲解

    早期的web中使用cookies在客户端保存诸如用户名等简单的信息,但是,在使用cookies存储永久数据存在以下问题. 1.cookies的大小限制在4kB,不适合大量的数据存储. 2.浏览器还限制 ...

  6. IDEA结合Maven的profile构建不同开发环境(SpringBoot)

    一.概述 在开发过程中,我们的项目会存在不同的开发环境,比如开发环境.生产环境.测试环境,而我们的项目在不同的环境中有些配置也是不一样的,比如数据源配置.日志文件配置等,假如我们每次将软件部署到不同的 ...

  7. npm安装使用^符号时,在0.0.1等版本下区别

    文档地址 https://docs.npmjs.com/misc/semver Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4§ Allows changes that do no ...

  8. JDOJ 1770 埃及分数

    JDOJ 1770: 埃及分数 https://neooj.com/oldoj/problem.php?id=1770 Description 分子均为1的分数叫做埃及分数,因为古代埃及人在进行分数运 ...

  9. 如何禁用Antimalware Service Executable

    有时发现风扇呼呼地转,查看任务管理器,发现其中antimalware service executable占用了大量的CPU和内存. 这是由于Windows Defender软件导致的,可以用如下方法 ...

  10. [LeetCode] 312. Burst Balloons 打气球游戏

    Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...