go语言之函数基础

1.介绍

        函数是基本的代码块,Go是编译型语言,所以函数编写的顺序是无关紧要的,但是我们一般把main()函数写在文件的前面,其他函数按照一定的逻辑顺序编写(例如函数被调用顺序)。

        编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。而且,同一个任务(函数)可以被调用多次,有助于代码重用。

        注:Don’t Repeat Yourself,执行特定任务的代码只能在程序里面出现一次

        Go里面有三种类型的函数:

        1.普通的带有名字的函数

        2.匿名函数或者lambda函数

        3.方法methods

        除了 main ()、init () 函数外,其它所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。

函数的基本格式:

func g() {
}

函数被调用的格式:

pack1.Function(arg1, arg2, …, argn)

例如:

package mainimport "fmt"func main() {fmt.Println("are u greeting?")greeting()fmt.Println("year")
}func greeting() {fmt.Println("greeting")
}are u greeting?
greeting
year 

2.多值返回

        Go函数支持多值返回,定义多值返回的返回参数列表时要使用"()"包裹,支持命名参数的返回,例如:

package mainimport "fmt"func main() {fmt.Println(swap(1, 9))
}func swap(a, b int) (int, int) {return b, a
}9 1

3.实参到形参的传递

        Go函数实参到形参的传递永远是值拷贝,有时候函数调用后实参指向的值发生了变化,那是因为参数传递的是指针值的拷贝,实参是一个指针变量,传递给形参的是这个指针变量的脚本,二者指向同一个地址,本质上参数传递仍是值拷贝,例如:

package mainimport "fmt"func chvalue(a int) int {a = a + 1return a
}
func chpointer(a *int) {*a = *a + 1return
}
func main() {a := 10chvalue(a)fmt.Println(a)chpointer(&a)fmt.Println(a)
}10
11

重点:chvalue函数是实参传递给形参是值拷贝,chpointer函数是实参传递给形参也是值拷贝,但是复制的是a的地址值

4.不定参数

        Go函数支持不定数目的形式参数,不定参数的声明使用param...type的语法格式。

        函数的不定参数有以下特点:

        1. 所有的不定参数类型必须是相同的

        2. 不定参数必须是函数的最后一个参数

        3. 不定参数名在函数体内相当于切片,对切片的操作同样适合对不定参数的操作

func sum(arr ...int) (sum int) { 
for _, v : = range arr { //此时 arr 就相当于切片,可以使用 range
sum += v 
return 
}

        4. 切片可以作为参数传递给不定参数,切片名后面要加上'...'

func sum(arr ...int) (sum int){for _,v :=range arr {sum +=v}return
}func main(){slice := []int{1,2,3,4}array := [...]int{1,2,3,4} //数组不可以作为实参传递给不定参数的函数sum(slice...)
}

        5. 形参为不定参数的函数和形参为切片的函数类型不同

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

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

相关文章

PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是什么)

进程、线程、协程 进程:应用程序的启动实例,运行起的代码叫进程,有独立的内存空间,类比工厂的P个(P1单进程,P>1多进程)车间。线程:线程是CPU调度的最小单位,是进程内…

面向对象-----继承

前面向大家介绍了面向对象中的封装性,今天再来向大家介绍面向对象的继承和多态的两大特性。 1.继承 1.1 为什么需要继承? 在java语言中,我们用类来描述世间万物,虽然万物非常复杂,但总有一些共同点,如果…

CAD2023 2024 2025以上版本出现无法运行 AutoCAD,原因可能如下1) 此版本的 AutoCAD 安装不正确

错误提示如下 此版本的 AutoCAD 安装不正确 缺少依赖组件Microsoft Edge webview2 Runtime 缺少依赖组件 Microsoft.NET跟You must install .NET Desktop Runtime 打开autoremove,点击扩展,输入 无法运行,点击搜索 你的软件属于什么版本…

fork 与 vfork 的区别

关键区别一: vfork 直接使用父进程存储空间,不拷贝。 关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。 我们可以定义一个cnt,在子进程中让它变成3, 如果使用fork,那…

PHP 7.4开始 调用方法success()可根据参数名称来指定参数值uccess(data: $list, count: $count)

定义了方法: static function success(int $code200,string $msgok,array $data[],int $count0,int $pages1){return [code>$code,msg>$msg,data>$data,count>$count,pages >$pages]; } 引用:(不用按顺序) return self::success(data:…

【LeetCode】【1】两数之和(1141字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现哈希表 个人主页:丷从心 系列专栏:LeetCode 刷题指南:LeetCode刷题指南 题目描述 给定一个整数数组nums和一个整数目标值target,请在该数组中找出…

【Vue3进阶】- Vite 配置

视频 Vite 配置 基础配置项 server 选项 本地运行时,开发环境服务器的配置。 host 默认 localhost,设置为 true 或 0.0.0.0 时会监听所有地址,让局域网内的设备进行访问,否则只有本机能访问项目。 open 默认 false&#x…

C#如何通过反射获取外部dll的函数

在C#中,你可以使用反射(Reflection)来加载外部的DLL(动态链接库)并获取其中的函数(在C#中通常称为方法)。但是,请注意,反射主要用于访问类型信息,并且对于非托…

Apache 平滑升级:逐步指南与示例

在维护Web服务器时,Apache的平滑升级是一项重要的操作,它可以确保服务在升级过程中继续对外提供服务,最小化或无需停机时间。本文将详细介绍如何在Linux系统中平滑升级Apache HTTP服务器,提供一个完整的操作示例,并说明…

Typora+PicGo+Gitee设置图床,解决CSDN上传markdown文件图片加载不出来的问题(超级实用)

注: 由于gitee现在已经加上了防盗链,并且只支持1M的图片,我觉得不是很好用(可以买腾讯云或阿里云等),之后找到比较好点的图床工具也会持续更新的。(sm.ms好像还好,github网速不太稳定…

计算机网络 3.5局域网

第五节 局域网 一、认识局域网 1.定义: ①功能性:一组在地理位置上相隔不远的计算机及其设备按照一定的连接方式组织起来的,以实现用户间相互通信的资源共享的网络系统。 ②技术性:由特定类型的传输媒体和网络适配器互联在一起…

基于Vue和uni-app的增强型单选ccRadioView组件开发

标题:基于Vue和uni-app的增强单选组件ccRadioView的设计与实现 摘要:本文将详细介绍如何使用Vue和uni-app构建一个简单、好用且通用的单选框组件ccRadioView。该组件提供了单选列表的功能,并支持反向传值,方便开发者快速实现单选…

太速科技-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

基于5VLX110T FPGA FMC接口功能验证6U CPCI平台 一、板卡概述   本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器&a…

【Java基础】IO流(4) —— 转换流、打印流

【Java基础】IO流(1) —— 简介 【Java基础】IO流(2) —— 字符流 【Java基础】IO流(3) —— 字节流 【Java基础】IO流(4) —— 转换流、打印流 【Java基础】IO流(5) —— 序列流、内存流 【Java基础】IO流(6) —— 随机访问文件流、数据流 转换流 InputStreamReader 是字节输…

【Linux】在Linux中使用date命令

路过了学校花店 荒野到海边 有一种浪漫的爱 是浪费时间 徘徊到繁华世界 才发现你背影 平凡得特别 绕过了城外边界 还是没告别 爱错过了太久 反而错得完美无缺 幸福兜了一个圈 想去的终点 就在原点 🎵 林宥嘉《兜圈》 前言 date命令是Linux系统…

【制作100个unity游戏之28】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版4(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言僵尸配置僵尸动画移动断头攻击死亡 源码完结 前言 本节主要实现配置僵尸动画,移动,断头,攻击,死亡功能。 僵尸 配置僵尸动画 普通动画 无头动画,新增覆盖图层 …

java实现环形链表带哨兵

双向环形链表带哨兵,这时哨兵既作为头,也作为尾。 package com.tfq.arithmetic.linkedlist;import java.util.Iterator;/*** author: fqtang* date: 2024/05/22/8:40* description: 环形链表*/ public class DoublyLinkedListSentinel implements Iterab…

嵌入式学习——3——IO分类模型

1、阻塞IO和非阻塞IO 1.1 阻塞IO - 在阻塞IO模型中,当一个IO操作(如读取或写入)开始时,如果数据没有准备好,程序会被挂起(即阻塞),直到数据准备好并且IO操作完成。 - 在数据准备阶段…

浏览器API与协议

现代浏览器是一个囊括了数百个组件的操作系统,包括进程管理、安全沙箱、分层的优化缓存、JavaScript虚拟机、图形渲染和GPU管道、存储系统、传感器、音频和视频,网络机制等等。 在浏览器上运行的应用的性能。,取决于多个组件:解析…