狂神说Go语言学习笔记(四)

news/2024/5/4 19:45:11/文章来源:https://blog.csdn.net/G823909/article/details/128135578

狂神说Go语言学习笔记(一)
狂神说Go语言学习笔记(二)
狂神说Go语言学习笔记(三)

一、什么是函数

func main() {//调用函数 函数名()fmt.Println(add(1, 2)) //3
}func add(a, b int) int {c := a + breturn c
}



二、函数的声明

func main() {printinfo()myprint("haha")fmt.Println(add2(1, 2))swap(1, 2)}// 无参返回值函数
func printinfo() {fmt.Println("printinfo")
}// 有一个参数的函数
func myprint(msg string) {fmt.Println(msg)
}// 有两个参数的函数
// 有一个返回值的函数
func add2(a, b int) int {c := a + breturn c
}// 有多个返回值的函数
func swap(a, b int) (int, int) {return b, a
}



三、形式参数和实际参数

// max 两个数字比大小
// 形式参数:定义函数时,用来接收外部传入数据的参数,就是形式参数
// 实际参数:调用函数时,传给形参的实际数据叫做实际参数
func max(num1, num2 int) int {var result intif num1 > num2 {result = num1} else {result = num2}//一个函数定义上有返回值,那么函数中必须使用return语句//返回值//调用处需要使用变量接受该结果return result
}



四、可变参数

概念:一个函数的参数类型确定,但是个数不确定,就可以使用可变参数

func myfunc(arg ... int){}//arg ... int 告诉go这个函数接收不定数量的参数,类型全部都是int
func main() {getSum(1, 2, 3, 4, 5, 6, 7, 100)
}func getSum(nums ...int) {sum := 0for i := 0; i < len(nums); i++ {fmt.Println(nums[i])sum += nums[i]}fmt.Println("sum:", sum)}

在这里插入图片描述


五、值传递和引用传递

在这里插入图片描述

值传递

func main() {//定义一个数组arr1 := [4]int{1, 2, 3, 4}fmt.Println("arr1默认数据", arr1)update(arr1)fmt.Print("arr1调用函数后数据", arr1)//arr2的数据是从arr1复制来的,所以是不同的空间//修改arr2并不会影响arr1//值传递:传递的是数据的副本,修改数据,对于原始的数据没有影响//值类型的数据,默认都是值传递,基础类型 array struct
}func update(arr2 [4]int) {fmt.Println("arr2接收数据", arr2)arr2[0] = 10fmt.Println("arr2修改后数据", arr2)
}

在这里插入图片描述
在内存中:
在这里插入图片描述
值传递类型的改变的都是原先数据的副本,两份分别在不同的内存空间中!,所以修改 arr1 , arr2 不会改变!

引用传递

// 引用传递
func main() {//切片,可以扩容的数组s1 := []int{1, 2, 3, 4}fmt.Println("s1默认数据", s1)update2(s1)fmt.Print("s1调用函数后数据", s1)
}func update2(s2 []int) {fmt.Println("s2接收数据", s2)s2[0] = 10fmt.Println("s2修改后数据", s2)}

在这里插入图片描述
在内存中:
在这里插入图片描述
s1 和 s2两个引用 都对同一片内存空间进行操作,改变s1 ,s2 当然也会变!


六、函数变量的作用域

在这里插入图片描述

//全局变量
var num int = 100
func main() {//函数体内的局部变量temp := 100if b := 1 ; b<=10{temp := 50fmt.Println(temp)//局部变量,就近原则fmt.Println(b)}fmt.Println(temp)fmt.Println(num)
}func f1()  {a := 1fmt.Println(a)fmt.Println(num)
}func f2()  {b := 2fmt.Println(b)fmt.Println(num)
}



七、递归函数

在这里插入图片描述

func main() {fmt.Println(getSum1(5)) //15
}func getSum1(n int) int {if n == 1 {return 1}return getSum1(n-1) + n
}



八、defer

在这里插入图片描述

func main() {f("1")fmt.Println("2")defer f("3")fmt.Println("4")    //1 2 4 3
}func f(s string) {fmt.Println(s)
}

在这里插入图片描述

func main() {f("1")fmt.Println("2")defer f("3")fmt.Println("4")defer f("5")fmt.Println("6")defer f("7")fmt.Println("8")   //1 2 4 6 8 7 5 3
}func f(s string) {fmt.Println(s)
}
func main() {a := 10fmt.Println("a=", a)//参数已经传递过去了 在最后执行defer f(a)a++fmt.Println("end a=", a)
}func f(s int) {fmt.Println("函数里面的a=", s)
}



九、函数的本质

// func() 本身就是一个数据类型
func main() {//f3 如果不加括号 函数就是个变量//f3() 如果加了括号那就成了函数的调用fmt.Printf("%T\n", f3) //func(int, int)//定义函数类型的变量var f5 func(int, int)f5 = f3   //引用类型的f5(1, 2)
}func f3(a, b int) {fmt.Println(a, b)
}

在这里插入图片描述



十、匿名函数

// 匿名函数
func main() {h1()h2 := h1 //函数本身也是一个变量h2()//匿名函数h3 := func() {fmt.Println("我是h3函数")}h3()x1 := func(a, b int) int {fmt.Println(a, b)return a + b//fmt.Println("我是h4函数")}(1, 2)fmt.Println(x1)
}func h1() {fmt.Println("我是h1函数")
}

在这里插入图片描述


十一、函数式编程

在这里插入图片描述

func main() {r2 := oper(1, 2, add)fmt.Println(r2) // 3r3 := oper(1, 2, sub)fmt.Println(r3) // -1r4 := oper(8, 4, func(i int, i2 int) int {if (i == 0) {fmt.Println("除数不能为0")return 0}return i / i2})fmt.Println(r4)  // 2
}
//高阶函数,可以接受一个函数作为一个参数
func oper(a, b int, fun func(int, int) int) int {r := fun(a, b)return r
}
func add(a, b int) int {return a + b
}func sub(a, b int) int {return a - b
}



十二、闭包

/*
一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量
并且该外层函数的返回值就是这个内层函数
这个内层函数和外层函数的局部变量,统称为闭包结构局部变量的生命周期就会发生改变 正常的局部变量会随着函数的调用而创建
随着函数的结束而销毁 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁 因为内层函数还在使用
*/func main() {r1 := increment()fmt.Println(r1)  // 0x22e680v1 := r1()fmt.Println(v1) // 1v2 := r1()fmt.Println(v2) // 2r2 := increment()v3 := r2()fmt.Println(v3) // 1
}func increment() func() int {//局部变量ii := 0//定义一个匿名函数,给变量自增并返回fun := func() int {i++return i}return fun
}

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

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

相关文章

hadoop3.x学习(一)--安装与环境配置

一、hadoop的组成 hadoop1.x&#xff1a;Commons、HDFS&#xff08;数据存储&#xff09;、MapReduce&#xff08;资源调度计算&#xff09;hadoop2.x:Commons、HDFS&#xff08;数据存储&#xff09;、MapReduce&#xff08;计算&#xff09;、Yarn(资源调度) 1.1 HDFS 分布式…

2万字一网通办远程视频踏勘建设方案67页

目 录 1. 建设背景 2. 建设周期 3. 需求分析 3.1. 需求定义 3.1.1. 需求活动目的 3.1.2. 需求分析流程 3.2. 技术需求 3.3. 用户分析 3.3.1. 办事企业 3.3.2. 踏勘人员 3.3.3. 审批人员 3.3.4. 系统管理人员 3.4. 性能需求 3.4.1. 系统架构 3.4.2. 响应时间 3.…

【目标检测】Faster R-CNN 论文复现代码(含源代码)

Faster R-CNN 论文复现代码 详细的代码使用守则&#xff1a; https://github.com/biluko/Faster-RCNN-Pytorch博客地址为&#xff1a; https://blog.csdn.net/wzk4869/article/details/128133224?spm1001.2014.3001.5501一、nets文件夹下 init.py classifier.py import w…

RK3588移植-ffmpeg交叉编译

文章目录1.下载ffmpeg2.交叉编译3.修改cmakelist.txt4.将lib文件复制到install目录下的lib目录5.测试文件6.运行测试样例7.错误n.测试文件源码1.下载ffmpeg git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2.交叉编译 进入下载目录&#xff0c;将ffmpeg编译成arm64平台…

【LeetCode每日一题:1779. 找到最近的有相同 X 或 Y 坐标的点~~~模拟遍历+曼哈顿距离】

题目描述 给你两个整数 x 和 y &#xff0c;表示你在一个笛卡尔坐标系下的 (x, y) 处。同时&#xff0c;在同一个坐标系下给你一个数组 points &#xff0c;其中 points[i] [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时&…

Go1.9.3跑GinDemo

Gin 1. 简介 1.1. 介绍 Gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确&#xff0c;具有快速灵活&#xff0c;容错方便等特点 对于golang而言&#xff0c;web框架的依赖要远比Python&#xff0c;Java之类的要小。自身的n…

实验(六):定时器实验

一、实验目的与任务 实验目的&#xff1a; 1&#xff0e;掌握定时/计数器的中断法工作原理&#xff1b; 2&#xff0e;熟悉C51编程与调试方法。 任务&#xff1a; 1. 运行Keil开发环境&#xff0c;完成定时器软件编程&#xff1b; 2. 建立Proteus仿真模型&#xff1b; 3&#x…

Flink系列之Flink流式计算引擎基础理论

声明&#xff1a; 文章中代码及相关语句为自己根据相应理解编写&#xff0c;文章中出现的相关图片为自己实践中的截图和相关技术对应的图片&#xff0c;若有相关异议&#xff0c;请联系删除。感谢。转载请注明出处&#xff0c;感谢。 By luoyepiaoxue2014 B站&#xff…

mapbox地图动画一键飞行

最近&#xff0c;Mapbox GL JS 从 v2.9 开始支持将地图显示为 3D 地球。 话不多说&#xff0c;马上看看效果怎么样&#xff1a; mapbox地图动画我们通过设置投影属性projection&#xff1a;globe&#xff0c;即可将地图更改为地球 const map new mapboxgl.Map({container: m…

【Linux初阶】操作系统概念与定位 | 操作系统管理硬件方法、系统调用和库函数概念

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;操作系统的基础概念、设计OS的目的&#xff0c;操作系统的定位&#xff0c;操作系统管理硬件方法&#xff0c;…

荣誉!InterSystems被独立研究机构Forrester评为“事务分析型数据平台领导者”

2022 年 12 月 1 日&#xff0c;中国&#xff0c;北京——致力于帮助客户解决最关键的可扩展性、互操作性和速度问题的创新数据技术提供商 InterSystems 今天宣布&#xff0c;在Forrester日前公布的《The Forrester Wave™&#xff1a;事务分析型数据平台(2022年第4季度)》报告…

硬件学习路线调研

学习路线 《Verilog传奇》、《Verilog HDL高级数字设计》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。 此外&#xff0c;你手上必须准备Verilog或者VHDL的官方文档&#xff0c;《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE …

科研绘图配色方案

科研绘图配色方案 在撰写论文的时候&#xff0c;美观&#xff0c;大气&#xff0c;上档次的图表能够很好地给自己的论文加分。但是在绘制图表的时候往往会面临色彩搭配的问题&#xff0c;选择合适的色彩搭配能够有效地展示自己的方法&#xff0c;但是色彩搭配选择不当的话往往…

2021-02-01

oracle设置定期修改密码 --通过如下sql查询用户密码有效期配置 SELECT username,PROFILE FROM dba_users; --上述sql查询结果一般为default --使用如下sql可以查询到default的默认值 select * from dba_profiles where profile DEFAULT and resource_name PASSWORD_LI…

Express 7 指南 - 开发中间件

Express Express 中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Express7 指南 - 开发中间件7.1 概述7.2 例子7.2.1 中间件函数 myLogger7.2.2 中间件函数 requestTime7.2.3 中间件函数 validateCookies7.3 可配置的中间件7 指南 - 开发…

数据结构与算法 -二叉树

二叉树相关算法 1. 二叉树基本知识 &#xff08;1&#xff09;二叉树结构 public class Node {V value;Node left;Node right; }left和right只能往下指&#xff0c;没有节点就为空。 &#xff08;2&#xff09;创建二叉树 对于一个完全二叉树&#xff0c;父节点为i, 左子节点…

Unity3d bounds包围盒 和collider碰撞器区别

Bounds 外包围盒 Bounds 叫作外包围盒、边界框、外扩矩形.是struct 结构体。而我们获得Bounds的主要途径有三种&#xff1a;Render,Collider,Mesh。 Render.bounds 世界坐标 Collider.bounds 世界坐标 Mesh.bounds 本地坐标 var m GetComponent<MeshFilter>().bound…

【数据结构】图的实现

文章目录图1.图的基本概念2.图的存储结构3.邻接矩阵3.1邻接矩阵的优缺点3.2邻接矩阵的实现4.邻接表4.1邻接表的实现5.图的遍历5.1广度优先遍历5.2深度优先遍历5.3如何遍历不连通的图&#xff1f;图 1.图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1…

BERT-of-Theseus

最近了解到一种称为"BERT-of-Theseus"的BERT模型压缩方法&#xff0c;源自论文《BERT-of-Theseus: Compressing BERT by Progressive Module Replacing》。这是一种以"可替换性"为出发点所构建的模型压缩方案&#xff0c;相比常规的剪枝、蒸馏等手段&#…

streptavidin-PEG-6-FAM 链霉亲和素-聚乙二醇-6-羧甲基荧光素

产品名称&#xff1a;链霉亲和素-聚乙二醇-6-羧甲基荧光素 英文名称&#xff1a;streptavidin-PEG-6-FAM 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、75…