【Go】函数的使用
目录
函数返回多个值
init函数和import
init函数
main函数
函数的参数
值传递
引用传递(指针)
函数返回多个值
用法如下:
package mainimport ("fmt""strconv"
)// 返回多个返回值,无参数名
func MultFunc1(a int, b int) (int, string) {a = a + 1b = b + 1//数字转字符串itoa := strconv.Itoa(b)return a, itoa}// 返回多个返回值,有参数名
func MultFunc2(a int, b int) (r1 int, r2 int) {//形参有默认值 是0fmt.Println("形参r1: ", r1, "r2: ", r2)r1 = a + 1r2 = b + 1return}func MultFunc3(a int, b int) (int, int) {a = a + 1b = b + 1return a, b}func main() {var a, b = MultFunc1(1, 2)fmt.Println("a=", a, "b=", b)var c, d = MultFunc2(3, 4)fmt.Println("c=", c, "d=", d)var e, f = MultFunc3(5, 6)fmt.Println("e=", e, "f=", f)
}
形参是有默认值的 0 ""(空串) false
init函数和import
init函数
init函数可以在package main 中,可在其他package中,可在同一个package中出现多次
main函数
main 函数只能在package main中。
执行顺序
golang中有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能用于package main)。这两个函数在定义的时候不能有任何的返回值和参数
虽然package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说都是不方便的,所以建议用户在一个package中每个文件只写一个init函数。
程序的初始化和执行都始于main包
如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。
当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。
等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
测试例子
代码结构如下
Lib1.go
package lib1import "fmt"func init() {fmt.Print("我是lib1")
}func Lib1Test() {fmt.Println("lib1Test")
}
Lib2.go
package lib2import ("fmt"
)func init() {fmt.Print("我是Lib2")
}
func Lib2Test() {fmt.Println("lib2Test")
}
main.go
注意:如果文中没有使用,就需要家一个_
package mainimport ("fmt""goProject/aaa/lib1""goProject/aaa/lib2"
)func init() {fmt.Print("我是Lib3.go")
}func main() {lib1.Lib1Test()lib2.Lib2Test()}
注意看打印的结果
输出的顺序与我们上面图给出的顺序是一致的
函数的参数
函数如果使用参数,该变量可称为函数的形参
形参就像是定义在函数体内的局部变量
调用函数,可以通过两种方式传递参数:
值传递
值传递是指在调用函数的时候将实际的参数复制一份传递到函数中,这样在函数中如果对参数进行修改,则不会影响到实际的参数。
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
下面使用一个经典的案例:两数交换
package mainimport "fmt"// 值传递
func Swap1(a int, b int) {var temp = aa = bb = temp}// 引用传递
func Swap2(a *int, b *int) {var temp = *a*a = *b*b = temp}func main() {a := 1b := 2Swap1(a, b)fmt.Println("值传递 a=", a, "b=", b)Swap2(&a, &b)fmt.Println("引用传递 a=", a, "b=", b)
}
执行结果如下:
第一种值传递的方式交换失败,是因为副本拷贝
第一种是引用传递,他是传递地址,那么引出了指针
引用传递(指针)
指针在C++中有用到。引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
详情,可以去看看C++,我也去看看!
相关文章:
![](https://i-blog.csdnimg.cn/direct/0ea19f49ed714593a13b94425ef17fb6.png)
【Go】函数的使用
目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递(指针) 函数返回多个值 用法如下: package mainimport ("fmt""strconv" )// 返回多个返回值,无参数名 func Mu…...
![](https://i-blog.csdnimg.cn/direct/95a36d449b3c4c2c816fa3a5fd7afe74.png#pic_center)
宝塔面板运行Admin.net框架
准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04(本贴使用的是Ubuntu20.04版本系统) Admin.net开发框架 先安装好服务器系统,这里就不做安装过程描述了&…...
![](https://img-blog.csdnimg.cn/img_convert/77bc5174feef3fd1e698198f7e35cf55.png)
Javaweb11-Filter过滤器
Filter过滤器 1.Filter的基本概念: 在Java Servlet中,Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...
![](https://www.ngui.cc/images/no-images.jpg)
【AI-7】CUDA
CUDA(Compute Unified Device Architecture)是NVIDIA公司开发的一种并行计算平台和编程模型,使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍: CUDA的特点 并行计算:CUDA允许开发…...
![](https://i-blog.csdnimg.cn/direct/6de32a9ea8a1432b8efa0684aada9406.png)
ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过
web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…...
![](https://www.ngui.cc/images/no-images.jpg)
基于实现Runnable接口的java多线程
Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行,以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在uniapp中使用websocket?
websocket是我们经常使用到的接口,通常用于即时通讯以及K线图这种需要实时更新数据的业务需求上,传统的restful接口虽然可以满足,但是你需要轮询,这就要额外写一堆代码,不是很方便,用websocket就简单很多,我们来看代码 第一步定义全局常量、变量 const config = {host…...
![](https://www.ngui.cc/images/no-images.jpg)
PCL 点云PFH特征描述子
点云PFH特征描述子 一、概述1.1 概念1.2 算法原理二、代码实现三、结果示例一、概述 1.1 概念 点特征直方图PFH(Point Feature Histograms)描述子:用于表示点云中每个点的局部几何形状信息,它是一种直方图描述子,包括了点云的法线方向和曲率信息,PFH描述子可以帮助区分不同…...
![](https://www.ngui.cc/images/no-images.jpg)
linux程序安装-编译-rpm-yum
编译安装流程步骤详解 识途老码 | Linux编译安装程序 编译安装概览 编译安装是从软件的源代码构建到最终安装的过程,它允许用户根据自身的需求和系统的环境来自定义软件的配置和功能。相对于二进制安装,编译安装提供了更高的灵活性和控制能力,但同时也要求用户具备一定的…...
![](https://www.ngui.cc/images/no-images.jpg)
【网络协议】PIM
PIM 1 基本概念 PIM(Protocol Independent Multicast)协议,即协议无关组播协议,是一种组播路由协议,其特点是不依赖于某一特定的单播路由协议,而是可以利用任意单播路由协议建立的单播路由表完成RPF&…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis 中的跳跃表(Skiplist)基本介绍
Redis 中的跳跃表(Skiplist)是一种用于有序元素集合的快速查找数据结构。它通过一个多级索引来提高搜索效率,能够在对数时间复杂度内完成查找、插入和删除操作。跳跃表特别适用于实现有序集合(sorted set)的功能&#…...
![](https://i-blog.csdnimg.cn/direct/82ac04d4f4a4458b85292de87304a729.png)
C语言编译和编译预处理
1.编译预处理 • 编译是指把高级语言编写的源程序翻译成计算机可识别的二进制程序(目标程序)的过程,它由编译程序完成。 • 编译预处理是指在编译之前所作的处理工作,它由编译预处理程序完成 在对一个源程序进行编译时࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
ahb 总线的一些思考
1. 如何处理对不存在地址的访问? 当主设备试图访问内存映射中不存在的地址时,系统需要处理这一情况以避免错误或未定义行为。通常通过使用默认从设备或错误响应机制来管理。具体如下: 默认从设备:默认从设备响应对未定义或不存在…...
![](https://img-blog.csdnimg.cn/img_convert/062811de8e79e3cccf0ef3be9141bc09.png)
spark shuffle写操作——SortShuffleWriter
写入的简单流程: 1.生成ExternalSorter对象 2.将消息都是插入ExternalSorter对象中 3.获取到mapOutputWriter,将中间产生的临时文件合并到一个临时文件 4.生成最后的data文件和index文件 可以看到写入的重点类是ExternalSorter对象 ExternalSorter 基…...
![](https://i-blog.csdnimg.cn/direct/055bdef5e43549099e54655538d1eb91.jpeg)
ESP32CAM物联网教学12
ESP32CAM物联网教学12 MicroPython 视频服务 小智希望能在MicroPython中实现摄像头的视频服务,就像官方示例程序CameraWebServer那样。 下载视频服务驱动库 小智通过上网搜索,发现相关的教学材料还不少,并且知道有人已经写出了视频服务的驱…...
![](https://www.ngui.cc/images/no-images.jpg)
【C++精华铺】12.STL list模拟实现
1.序言 STL (Standard Template Library)是C标准库中的一个重要组件,提供了许多通用的数据结构和算法。其中,STL list是一种带头双向链表容器,可以存储任意类型的元素。 list的特点包括: 双向性:list中的元素可以根据需…...
![](https://i-blog.csdnimg.cn/direct/dca89cce5c8e46e7bcb3367fb4655b18.png)
ChatGPT Mac App 发布!
2024 年 6 月,OpenAI 的大语言模型 ChatGPT 的 Mac 客户端与 ChatGPT-4o 一起发布了。ChatGPT Mac 户端可以让用户直接在 Mac 电脑上使用 ChatGPT 进行对话。它提供了一个简单易用的用户界面,用户可以在其中输入文本或语音指令,并接收模型生成…...
![](https://www.ngui.cc/images/no-images.jpg)
ACE之ACE_Time_Value
简介 ACE_Time_Value在ACE中表示时间,集成不同平台的时间 结构 #mermaid-svg-dGoKn1R7GicabUif {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dGoKn1R7GicabUif .error-icon{fill:#552222;}#mermaid-…...
![](https://www.ngui.cc/images/no-images.jpg)
[论文笔记] 自对齐指令反翻译:SELF-ALIGNMENT WITH INSTRUCTION BACKTRANSLATION
https://arxiv.org/pdf/2308.06259 这篇论文介绍了一种名为“指令反向翻译”(instruction backtranslation)的方法,用于通过自动标记人类书写的文本和相应的指令来构建高质量的指令跟随语言模型。这里是一个通俗易懂的解释: 一、背景 通常,训练一个高质量的指令跟随语言…...
![](https://www.ngui.cc/images/no-images.jpg)
算术运算符. 二
# 表达式 # 操作数和运算符组成 比如 11 # 作用:表达式可以求值,也可以给变量赋值。 # Python算术运算符: # - * / % //(整除:向下取整) ** print(10 4) # 14 print(10 - 4) # 6 print(10 * 4) # 40 …...
![](https://www.ngui.cc/images/no-images.jpg)
代码优化方法记录
每次代码 review 之后,对 review 的情况进行总结记录,产出实际经验,方便组内学习、分享。 1、提取公共内容 公共内容要提取,避免重复编写; 2、css 色值使用变量 css 中的色值、字体,都换成组件库中的变…...
![](https://www.ngui.cc/images/no-images.jpg)
qt 图形、图像、3D相关知识
1.qt 支持3d吗 Qt确实支持3D图形渲染。Qt 3D模块是Qt的一个组成部分,它允许开发者在Qt应用程序中集成3D内容。Qt 3D模块提供了一组类和函数,用于创建和渲染3D场景、处理3D对象、应用光照和纹理等。 Qt 3D模块包括以下几个主要组件: Qt 3D …...
![](https://i-blog.csdnimg.cn/direct/b784011cc977421498f08d7b703fcf46.png)
【逆向基础】十、工具分享之DIE(Detect It Easy)
一、简介 DIE(Detect It Easy)是一款可以轻松检测PE文件的程序;其主要作用是查壳,并将pe文件的内容解析出来,包括PE文件中包含的导入函数、导出函数的名称及地址,入口函数地址等,是技术人员分析…...
![](https://www.ngui.cc/images/no-images.jpg)
Netcat:——网络瑞士军刀
Netcat: 网络瑞士军刀 概述 Netcat(通常称为 nc)是一个功能强大的网络工具,广泛用于网络测试和调试。它能够读取和写入网络数据,支持TCP、UDP协议,可以用于端口扫描、端口监听、文件传输等多种用途。 主要用途 获取…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ //练习 14.50 在初始化ex1和ex2的过程中,可能用到哪些类类型的转换序列呢?说明初始化是否正确并解释原因。
C Primer(第5版) 练习 14.50 练习 14.50 在初始化ex1和ex2的过程中,可能用到哪些类类型的转换序列呢?说明初始化是否正确并解释原因。 struct LongDouble{LongDouble(double 0.0);operator double();operator float(); }; Long…...
![](https://i-blog.csdnimg.cn/direct/f7f5d1cb5cd34e948d7bb66bb8923afe.png)
【开源 Mac 工具推荐之 1】gibMacOS:方便快捷的 macOS 完整包下载 Shell 工具
简介 gibMacOS 是由 GitHub 开发者 corpnewt 编写的一款 Shell 工具。它采用 Python 编程语言,可以让用户打开后在纯文本页面中轻松选择并下载来源于 Apple 官方的 macOS 完整安装包。 Repo 地址:https://github.com/corpnewt/gibMacOS (其…...
![](https://www.ngui.cc/images/no-images.jpg)
pdf文件如何快速英文转中文?
要将 PDF 文件中的英文内容转换为中文,你可以使用以下几种方法: 1、在线翻译工具: 使用网上的免费在线翻译工具,如Google翻译、百度翻译或有道翻译,将整个 PDF 文档粘贴到工具中进行翻译。 2、专业翻译软件…...
![](https://img-blog.csdnimg.cn/img_convert/4f55d254b858f7d5204e8dd707a83b8d.gif)
程序的控制结构——if-else语句(双分支结构)【互三互三】
目录 🍁 引言 🍁if-else语句(双分支结构) 👉格式1: 👉功能: 👉程序设计风格提示: 👉例题 👉格式2: 👉…...
![](https://i-blog.csdnimg.cn/direct/52f953545a2a44feb130e061e0867f0d.gif)
[C++]初识C++(命名空间,命名空间使用,函数重载,缺省参数等)
💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...
![](https://www.ngui.cc/images/no-images.jpg)
每天一个数据分析题(四百十六)- 线性回归模型
根据模型假设,线性回归模型中误差项的方差为 A. 常数 B. 函数 C. 随机变量 D. 以上都不是 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL,统计学&#…...
![](https://img-blog.csdnimg.cn/img_convert/3ec624a19b2d1f4f798a04ecb3961441.png)
做网站模板哪里买/电商代运营一般收多少服务费
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)本文作者: 苏洋创建时间: 2019年08月05日 统计字数: 7024字 阅读时间: 15分钟阅读 本文链接: https://soulteary.com/2019/08/05/p…...
![](https://img-blog.csdnimg.cn/img_convert/629b8d3e429b1a6f93f9273440e00146.png)
上海高端品牌网站建设/如何弄一个自己的网站
这是我之前项目同学遇到的一个问题,现实代码比较复杂,现在我将尽可能简单的描述这个问题,并且内容重心会放在探索为什么会出现这样的情况以及后续监控。一、问题的起源先看一个非常简单的model类Boy:publicclass Boy {publicString boyName;p…...
![](/images/no-images.jpg)
做相册网站logo/网推怎么做
转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/06/02/3114323.html...
![](/images/no-images.jpg)
做网站说要自己贴税点是怎么回事呀/近期新闻热点
推荐地址:推荐这款 软件源码模板资料.rar 001 01.第1章内容介绍.flv 003 03.项目介绍-项目概述.flv 004 04.项目介绍-功能模块和业务流程.flv 005 05.项目技术架构-软件架构的演进-从单体到SOA.flv 006 06.项目技术架构-软件架构的演进-微服务架构.flv 007 07.项目…...
![](https://img-blog.csdnimg.cn/img_convert/a3e4913e9cd11bd95bd1282b36a2b935.png)
做网站配置好了找不到服务器/长沙seo网络营销推广
简单是可靠的前提条件真正程序员从来不写代码的注释,如果代码非常难写,那么同样代码的注释也会非常难懂 看看当前计算机程序糟糕的事态,软件开发明显一直是一门妖术,其仍然不能被称为一个工程学。–比尔.克林顿 美国前总统...
![](https://img-blog.csdnimg.cn/20181127214229553.jpg)
布吉企业网站建设/宜兴百度推广公司
随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 转自:http://blog.csdn.net/liweibin1994/article/details/53066272 笔者的系统是Ubuntu14.04. 1. 不知道一个软件的全称,如何安装它&am…...