【Go】六、函数

文章目录

  • 1、函数的定义
  • 2、内存分析
  • 3、注意点
  • 4、函数数据类型
  • 5、自定义数据类型(起别名)
  • 6、支持对返回值命名

1、函数的定义

语法:

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

注意点:

  • 函数名首字母大写,可以被本包和其他包文件调用(public)
  • 函数名首字母小写,只能在本包文件中使用(private)

示例:

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)
}

无返回值:

func cal (num1 int,num2 int) { //无返回值var sum int = 0sum += num1sum += num2fmt.Println(sum)
}

多个返回值:

在这里插入图片描述
多个返回值,但只接收一个返回值,用_忽略:

在这里插入图片描述

2、内存分析

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)   //10、20exchangeNum(num1,num2)fmt.Printf("交换后的两个数: num1 = %v,num2 = %v \n",num1,num2)	//也是10、20
}

在这里插入图片描述

3、注意点

  • 和Java不一样,go不支持方法的重载
  • 支持可变长参数,函数内部将可变参数当做切片来处理
package main
import "fmt"
//可变参数 ...  参数的数量可变,Java中是【类型... 可变长参数名】
//args...int 可以传入任意多个数量的int类型的数据  传入0个,1个,,,,n个
func test (args...int){//函数内部处理可变参数的时候,将可变参数当做切片来处理//遍历可变参数:len函数求长度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)
}
  • 基本数据类型和数组默认都是值传递的,即进行值拷贝,调函数修改,不会影响原来的值

在这里插入图片描述

  • 以值传递方式的数据类型,如基本数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量

在这里插入图片描述

4、函数数据类型

在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(10) //等价于  test(10)
}

运行结果:

a的类型是:func(int),test函数的类型是:func(int)
10

既然可以有函数类型的变量,那函数类型的形参也可以:

在这里插入图片描述

5、自定义数据类型(起别名)

语法:

 type 自定义数据类型名  数据类型       

type mylnt int ,即myInt等价于int
在这里插入图片描述

注意,虽然是别名,但仍然不能直接互相赋值。

//定义一个函数,把另一个函数作为形参:
func test02 (num1 int ,num2 float32, testFunc func(int)){fmt.Println("-----test02")
}//type
type myFunc func(int)
func test02 (num1 int ,num2 float32, testFunc myFunc){fmt.Println("-----test02")
}

6、支持对返回值命名

对函数返回值命名,里面顺序就无所谓了,顺序不用对应,也不用return后面跟了。旧的写法:

在这里插入图片描述

此时,result01就对应第一个返回值,int类型,result02就对应第二个返回值,int类型。改用升级写法:

在这里插入图片描述

有了命名,就不用再return里做对应了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/579265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司官网怎么才会被百度收录

在互联网时代&#xff0c;公司官网是企业展示自身形象、产品与服务的重要窗口。然而&#xff0c;即使拥有精美的官网&#xff0c;如果不被搜索引擎收录&#xff0c;就无法被用户发现。本文将介绍公司官网如何被百度收录的一些方法和步骤。 1. 创建和提交网站地图 创建网站地图…

学俄语能不能直接学口语,而不学语法?柯桥俄语培训

语言属性决定&#xff0c;俄语入门就要学语法&#xff01; 俄语教学实践已经证明&#xff0c;俄语语法必须要学&#xff0c;而且优先学。 这是为什么呢&#xff1f; 这是由俄语本身的特性决定。俄语属屈折语&#xff0c;其典型特征便是以丰富的词形变化来表达词与词之间的关…

QML通过鼠标拖动的位置

当通过鼠标拖动Rectangle 的位置时&#xff0c;可以使用Qt Quick的MouseArea组件来实现 Rectangle {id: rectx:0;y:0width: 200; height: 100color: "lightblue"MouseArea {id: mouseAreaanchors.fill: parentdrag.target: rect//要拖动的项目的IDdrag.axis: Drag.XA…

蓝桥杯算法题-图形排版

题目描述 小明需要在一篇文档中加入 N 张图片&#xff0c;其中第 i 张图片的宽度是 Wi&#xff0c;高度是 Hi。   假设纸张的宽度是 M&#xff0c;小明使用的文档编辑工具会用以下方式对图片进行自动排版&#xff1a; 1. 该工具会按照图片顺序&#xff0c;在宽度 M 以内&…

基于java高校社团招新系统设计与实现

摘要 &#xff1a;大学学生社团的不断壮大发展&#xff0c;让对社团的招新管理越来越重要&#xff0c;如何高效的管理社团&#xff0c;促进社团有效的运行和发展变得尤为关键。学生社团在学生的成长发展过程中有着一定的积极作用&#xff0c;要发挥好社团的优势&#xff0c;管…

商品数据化运营---初步整理

商品数据化运营是指利用数据分析技术来优化商品的销售、管理和推广过程。这种方法结合了数据科学、商业智能、市场分析和消费者行为研究等多个领域的技术和理论&#xff0c;旨在通过分析大量的商品和销售数据来提高商品的市场表现和企业的利润。 以下是商品数据化运营的一些关…

哪里脏扫哪里,脏污识别将成扫地机器人下一个“卷”点?

让“人工式”清洁成为可能。 同质化竞争中的下一个“卷”点&#xff1f; 对于扫地机器人而言&#xff0c;脏污识别并非是个新概念&#xff0c;从2022年开始就有厂商提出&#xff0c;只是相较于其它方面的“内卷”&#xff0c;厂商们最初对它的重视程度并不高&#xff0c;目前脏…

软考103-上午题-【结构化开发】-模块独立

一、命题特点 考试类型&#xff1a; 选择题&#xff08;3~9分&#xff09;综合分系题&#xff08;数据流图【试题一】&#xff0c;15分&#xff09; 二、系统设计的基本原理 1、抽象 2、模块化 将一个待开发的软件分解为若干个小的简单部分——模块。 每个模块可以独立的开…

登录者个人信息查询

目录 &#x1f95e;1.vo层描述 &#x1f37f;2..vo层创建 &#x1f32d;3.编写controller层 &#x1f953;4.service层 &#x1f9c2;5.测试 1.vo层描述 Spring Boot项目中的实体类通常用于映射数据库表&#xff0c;包含了业务对象的所有属性。然而&#xff0c;前端或其…

QT 最近使用的项目配置文件

目录 1 QT 最近使用的项目配置文件所在路径 2 QtCreator.ini 1 QT 最近使用的项目配置文件所在路径 C:\Users\your username\AppData\Roaming\QtProject QtCreator.ini最好先备份一份 2 QtCreator.ini ProjectExplorer 下面的 RecentProjects\FileNames RecentProjects\…

【AI】命令行调用大模型

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【AI】命令行调用大模型引入正文初始化项目撰写脚本全局安装 成果展示 【AI】命令…

远程过程调用-buttonrpc源码解析5-函数绑定

前面几节的文章里提到过“通过一定的技术手段&#xff0c;通知远程服务器调用某个函数来执行相应的功能”&#xff0c;本片文章分析服务端如何使用std::bind函数&#xff0c;统一函数调用形式。 1、先看一个简单的例子&#xff1a; 温馨提示&#xff1a;std::bind除了绑定普通…