Go语言入门-函数

函数

函数的声明

在Go语言中,函数的声明方式有以下几种:

普通函数声明

普通函数声明是最基本的函数声明方式,它的语法如下:

func 函数名(参数列表) 返回值类型 {// 函数体
}

其中,参数列表可以是零个或多个参数,每个参数由参数名和参数类型组成,多个参数之间用逗号分隔;返回值类型可以是零个或多个类型,多个类型之间用逗号分隔。

举个例子,以下是一个计算两个整数之和的函数:

//声明
func add(x int, y int) int {return x + y
}
//调用
result := add(3, 5)

这个函数的参数列表有两个参数:x和y,它们都是int类型;返回值类型是int型。

匿名函数声明

匿名函数是没有函数名的函数,它的语法如下:

func(参数列表) 返回值类型 {// 函数体
}

与普通函数不同的是,在匿名函数声明中,函数名被省略了,而函数体直接写在了声明语句中。

举个例子,以下是一个将字符串转为大写的匿名函数:

upper := func(s string) string {return strings.ToUpper(s)
}
//调用
println(upper("nihao"))

这个匿名函数只有一个参数s,它的返回值类型是string型。

方法声明

在Go语言中,方法就是与特定类型相关联的函数。方法声明的语法如下:

func (接收器类型) 方法名(参数列表) 返回值类型 {// 函数体
}

其中,接收器类型指定了该方法与哪种类型相关联。在调用该方法时,会自动将该类型的一个变量作为第一个参数传入方法中。

举个例子,以下是一个计算点之间距离的方法:

type Point struct {X, Y float64
}func (p Point) Distance(q Point) float64 {return math.Hypot(q.X-p.X, q.Y-p.Y)
}
func main() {p := Point{X: 0.0, Y: 0.0}q := Point{X: 3.0, Y: 4.0}println(p.Distance(q)) //+5.000000e+000
}

这个方法的接收器类型是Point,它的参数列表有一个Point类型的参数q,返回值类型是float64型。

函数变量声明

在Go语言中,函数也可以被看作一种类型,因此可以定义函数变量。函数变量的声明方式如下:

var 变量名 func(参数列表) 返回值类型 = 函数名

其中,变量名为函数变量的变量名,参数列表和返回值类型与函数名相同。

举个例子,以下是一个将字符串转为小写的函数变量:

lower := strings.ToLower
println(lower("NiHao")) //nihao

这个函数变量的参数列表只有一个string类型的参数s,返回值类型也是string型。

可变参数

可变参数是指函数接受不定数量的参数。我们可以使用"…"语法来声明可变参数。下面是一个简单的例子:

func sum(nums ...int) int {total := 0for _, num := range nums {total += num}return total
}func main() {result := sum(1, 2, 3, 4, 5)fmt.Println(result) //  15
}

在上面的例子中,sum函数接受一个不定数量的整数参数,并将它们相加返回总和。在main函数中调用sum函数时,我们传递了5个整数参数,但是sum函数可以接受任意数量的参数。除了整数类型,可变参数也可以接受其他类型的参数,例如字符串、结构体等。需要注意的是,可变参数在函数内部被当作切片(slice)处理。因此,在函数内部可以像操作切片一样使用可变参数。

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

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

相关文章

【C++的OpenCV】第十五课-OpenCV的绘图工具(rectangle、circle、line、polylines、putText)常用方法简介

🎉🎉🎉 欢迎各位来到小白 p i a o 的学习空间! \color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入…

若依spring-boot myBatis Xml查询部分字段为null的解决方案

原因很简单 &#xff0c;仔细看发现都是带有下划线的字段无法查询&#xff0c;因为实体类的命名是驼峰&#xff0c;和数据库不对应&#xff0c;这时候只需要在myBatis-config.xml中配置一下使用驼峰转换即可。因为默认是关闭的。 <!-- 使用驼峰命名法转换字段 --> <s…

你知道什么是 Ping 吗?

欢迎到我的博客浏览 胤凯 (oyto.github.io) 这次我们来看一下什么是 Ping 操作&#xff0c;以及它有什么用处&#xff0c;并且我们来动手实现一个简易版的 Ping 工具。 Ping 是什么&#xff1f; ​ ping 是一个计算机网络工具&#xff0c;通常用于测试网络连接的可达性和测…

中文编程软件怎么下载,中文编程语言

中文编程软件怎么下载&#xff0c;中文编程语言 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;想如图这个实例就是用这个工具…

【MySQL】视图

文章目录 一. 基本使用二. 视图规则和限制结束语 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。 视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图 一. 基本使用 创建视图 …

Linux系统jdkTomcatMySQL安装以及J2EE后端接口部署

目录 一、jdk&Tomcat安装 1.1 上传安装包到服务器 1.2 解压对应工具包 1.3 配置环境变量并测试jdk安装 1.4 启动tomcat 1.5 防火墙设置 1.5.1 开启/关闭防火墙以及防火墙状态查看 1.5.2 开放防火墙端口 二、MySQL安装 2.1 卸载mariadb 2.2 在线下载MySQL安装包(…

C++标准模板(STL)- 类型支持 (类型特性,is_union,is_class,is_function)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

PCL setCameraPosition 参数讲解

setCameraPosition 的原型如下void setCameraPosition (double pos_x, double pos_y, double pos_z,double view_x, double view_y, double view_z,double up_x, double up_y, double up_z, int viewport 0);pos_x pos_y pos_z为相机所在的位置view_x view_y view_z 是焦点所…

用前端框架Bootstrap的AdminLTE模板和Django实现后台首页的页面

承接博文 用前端框架Bootstrap和Django实现用户注册页面 继续开发实现 后台首页的页面。 01-下载 AdminLTE-3.1.0-rc 并解压缩 以下需要的四个文件夹及里面的文件百度网盘下载链接&#xff1a; https://pan.baidu.com/s/1QYpjOfSBJPmjmVuFZdSgFQ?pwdo9ta 下载 AdminLTE-3.1…

十种排序算法(1) - 准备测试函数和工具

1.准备工作 我们先写一堆工具&#xff0c;后续要用&#xff0c;不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…

运行real.exe时出现NUM_METGRID_SOIL_LEVELS=0

本人在运行real.exe时&#xff0c;发现出现这样的报错&#xff1a; d01 2020-01-01_00:00:00 ---- ERROR: Mismatch between namelist and global attribute NUM_METGRID_SOIL_LEVELS NOTE: 2 namelist vs input data inconsistencies found. -------------- FATAL CALL…

机器人入门(四)—— 创建你的第一个虚拟小车

机器人入门&#xff08;四&#xff09;—— 创建你的第一个虚拟小车 一、小车建立过程1.1 dd_robot.urdf —— 建立身体1.2 dd_robot2.urdf —— 添加轮子1.3 dd_robot3.urdf —— 添加万向轮1.4 dd_robot4.urdf —— 添加颜色1.5 dd_robot5.urdf —— 添加碰撞检测(Collision …

在pycharm中,远程操作服务器上的jupyter notebook

一、使用场景 现在我们有两台电脑&#xff0c;一台是拥有高算力的服务器&#xff0c;另一台是普通的轻薄笔记本电脑。如何在服务器上运行jupyter notebook&#xff0c;同时映射到笔记本电脑上的pycharm客户端中进行操作呢&#xff1f; 二、软件 pycharm专业版&#xff0c;jupy…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起&#xff0c;所有升级到HarmonyOS 4的手机用户在美团外卖下单后&#xff0c;可通过屏幕上的一个“小窗口”&#xff0c;随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”&#xff0c;就是实况窗功能。 实况窗&#xff1a;简…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

843. n-皇后问题

文章目录 QuestionIdeasCode Question n− 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n &#xff0c;请你输出所有的满足条件的棋子摆法。 输入格…

心理咨询预约小程序

随着微信小程序的日益普及&#xff0c;越来越多的人开始关注如何利用小程序来提供便捷的服务。对于心理咨询行业来说&#xff0c;搭建一个心理咨询预约小程序可以大大提高服务的效率和用户体验。本文以乔拓云平台为例&#xff0c;详细介绍如何轻松搭建一个心理咨询预约小程序。…

数据库的本质永远都不会改变基础语句(第二十二课)

JAVA与Mysql._java数据库和mysql_真正的醒悟的博客-CSDN博客

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-ChatGLM2模型的微调训练参数解读 目录 GPT实战系列-ChatGLM2模型的微调训练参数解读ChatGLM2模型1、P-Tuning模型微调2、微调训练配置参数train.sh中配置参数训练配置信息模型配置信息附录&#xff1a;训练正常运行打印信息 ChatGLM2模型 ChatGLM-6B是开源的文本生…

辅助驾驶功能开发-功能规范篇(22)-6-L2级辅助驾驶方案功能规范

1.3.6 ELK 系统功能定义 ELK全称Emergency Lane Keeping,即紧急车道保持。当车辆与道路边界护栏(包含隔离带护栏、路锥、水马) 有碰撞危险或当车辆正偏出道路边沿且存在“对向来车”或“后向来车”与本车有碰撞风险时,通过给与转向反力矩进行车辆横向运动介入控制,避免或减…