当前位置: 首页 > news >正文

C函数基础.go

前言: 在Go语言中,函数是构成程序的基本模块,它封装了一段具有特定功能的代码,使得代码更易读,更易维护和重用。熟练掌握函数的定义、调用以及相关特性是成为Go语言开发者的必经之路。

目录

函数定义:给代码找个 “活儿的由头”

函数调用:使唤函数干活儿

参数传递:给函数 “送礼物”

值传递:给函数 “拍个照”

指针传递:给函数 “钥匙”

多值传递与可变参数:给函数 “大礼包”

匿名函数与闭包:函数界的 “临时工” 和 “特工”

匿名函数:无名的干活儿的

闭包:偷偷藏变量的 “特工”

函数作为值:函数的 “分身术”

传递函数:让函数 “打工”

返回函数:函数的 “魔法盒子”

总结

函数是编程的 “百宝箱”


函数定义:给代码找个 “活儿的由头”

写代码的时候,是不是总觉得重复的操作太多,看着就心烦?函数这就派上用场了,把它定义好,以后想用哪儿直接喊它就行。

定义函数就像给代码立了个 “flag”,告诉它 “要是有这情况,你就按我说的干”。先瞅瞅这基本样子:

func 我叫啥(给我啥)(还你啥){// 我干啥
}
  • 我叫啥:这就是函数的名字,得叫得响亮又明确,比如叫 煮泡面,一听就知道是干啥的。

  • 给我啥:参数嘛,就是函数干活儿的原材料。比如 (泡面种类 string, 调料包数 int),意思是我给你泡面和调料包的数量。

  • 还你啥:干完活儿给你的成果,返回值。比如 (好吃的泡面 string),给你一碗热乎的泡面。

咱整个活儿,定义个 “吹牛” 函数,看这操作:

    func 我吹牛(身份 string,干啥 string) (牛皮 string) {牛皮 = 身份 + " 我昨天 " + 干啥 + " 可厉害了,那场面,绝了!"return
    }

     调用一下,看这效果:

    fmt.Println(我吹牛("编程大神", "写代码")) 
    // 输出:"编程大神 我昨天写代码可厉害了,那场面,绝了!"

    有了这个函数,以后吹牛都不用费脑子了,直接套模板,是不是绝了?

    函数调用:使唤函数干活儿

    写好函数不调用,那不就白写了?调用函数就像使唤小弟一样,你喊一声,它就屁颠屁颠来干活儿。

    简单调用:

    我吹牛("健身达人", "举铁")

    要是函数能给你多个结果,你就用多个变量接:

    func 我给信息() (名字 string, 年龄 int) {return "张三", 25
    }他的名字, 他的年龄 := 我给信息()
    fmt.Printf("%s 今年 %d 岁。", 他的名字, 他的年龄)
    // 输出:"张三 今年 25 岁。"

     要是有些返回值不想要,咱就用 _ 来打发它:

    _, 他的年龄 := 我给信息()
    fmt.Printf("年龄:%d", 他的年龄) // 输出:"年龄:25"

    这不就得了,想干啥干啥,函数听话得很!

    参数传递:给函数 “送礼物”

    参数传递就是给函数送东西,让它用这些东西干活儿。送的方式不一样,效果也不同。

    值传递:给函数 “拍个照”

    值传递就是给函数一张参数的 “照片”,函数咋折腾这张照片,原参数都跟它没关系。

    func 我试试改(x int) {x = 100
    }a := 10
    我试试改(a)
    fmt.Println(a) // 输出:10,a 一点事没有

    这就跟给朋友照片让他随便画一样,原照片还是好好的。

    指针传递:给函数 “钥匙”

    指针传递就是把参数的 “钥匙” 给函数,函数直接去你家改东西。

    func 我真的改(a *int) {*a = 100
    }a := 10
    我真的改(&a)
    fmt.Println(a) // 输出:100,a 被改了

    这就跟把钥匙给朋友让他直接进你家改东西一样,改完你就懵了。

    多值传递与可变参数:给函数 “大礼包”

    有时候要给函数送一堆参数,Go 允许我们用 ... 给它送 “大礼包”。

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

    这就跟给朋友送一箱零食,让他一颗一颗吃,最后算总数。

    匿名函数与闭包:函数界的 “临时工” 和 “特工”

    匿名函数:无名的干活儿的

    匿名函数没名字,就像临时工,用完就走,可干活儿利索得很。

    func() {fmt.Println("我是个无名小卒,但能干活儿!")
    }()// 输出:"我是个无名小卒,但能干活儿!"

    咱也可以把它存起来,想啥时候用就啥时候用: 

    做饭 := func() {fmt.Println("我在做饭!")
    }
    做饭() // 输出:"我在做饭!"

    闭包:偷偷藏变量的 “特工”

    闭包就是匿名函数偷偷藏了一个变量,像特工一样,带着这个变量到处跑。

    func 计数器() func() int {count := 0return func() int {count++ // 偷偷改 countreturn count}
    }计数 := 计数器()
    fmt.Println(计数()) // 输出:1
    fmt.Println(计数()) // 输出:2

    这就像有个小本子,每次调用函数就偷偷在小本子上记一笔,下次还能接着记。

    函数作为值:函数的 “分身术”

    在 Go 里,函数可以像玩具一样被传来传去,还能变出新花样。

    传递函数:让函数 “打工”

    func 干点啥(干啥 func()) {fmt.Println("我要开始啦!")干啥()fmt.Println("干完啦!")
    }做饭 := func() {fmt.Println("做饭中……")
    }
    干点啥(做饭)// 输出:
    /*
    我要开始啦!
    做饭中……
    干完啦!
    */

    这就跟让做饭函数去干点啥函数那 “打一天工”,干点啥就是 “工头”。

    返回函数:函数的 “魔法盒子”

    func GetGreeter(name string) func() {return func() {fmt.Printf("你好呀,%s!\n", name)}
    }greeter := GetGreeter("小明")
    greeter() // 输出:"你好呀,小明!"

    这就跟打开一个 “魔法盒子”,每次打开都根据名字变出不同的问候。

    总结

    函数是编程的 “百宝箱”

    宝子们,Go 语言的函数就是个 “百宝箱”,你想让它干啥都能干。从定义、调用到那些奇奇怪怪的参数传递,再到匿名函数、闭包、函数作为值这些 “高端操作”,只要掌握了,你写代码就跟玩积木一样,咋搭都好看,还超实用!

    以后写代码,多让函数 “整活儿”,把复杂的事儿交给它,简单的事儿也交给它,反正啥事儿都能交给它!编程其实就是这么简单又好玩,冲就完事儿!

    http://www.lryc.cn/news/571568.html

    相关文章:

  • 江松科技报考上市:负债率高企,2024年现金流量、在手订单回退
  • 写一个vite插件处理console
  • el-upload 点击上传按钮前先判断条件满足再弹选择文件框
  • Python 构建壳来启动加密的 SpringBoot Jar 包,增加反编译难度
  • 亚远景-ASPICE与ISO 26262:理解汽车软件质量保障的双标体系
  • 小米汽车5月交付量超过28000台,与上月持平
  • STM32 GPIO 寄存器开发
  • Linux设备框架:kset与kobject基本介绍
  • Dify动手实战教程(入门-猜病、哄哄模拟器)
  • 树结构的实际应用之堆排序
  • 【redis】安装与使用
  • 【开源解析】基于Python+Qt打造智能应用时长统计工具 - 你的数字生活分析师
  • web和uniapp接入腾讯云直播
  • 胰腺癌耐药机制新发现:超级增强子如何调控吉西他滨敏感性
  • 【Linux】基于单例模式的线程池设计
  • 构建智能问答系统:从零开始实现 RAG 应用
  • MySQL常用函数详解之流程函数
  • 逆向入门(12)程序逆向篇-Acid burn
  • Docker Compose部署Spring Cloud 微服务系统
  • CppCon 2016 学习:On using singletons in C++
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • Uniapp性能优化全面指南:从原理到实践
  • 从0开始学习R语言--Day26--因果推断
  • 4. 时间序列预测的自回归和自动方法
  • Docker学习笔记:数据卷
  • 秋招是开发算法一起准备,还是只准备一个
  • 【CUDA编程】OptionalCUDAGuard详解
  • 【6G技术探索】MCP协议整理分享
  • 6.IK分词器拓展词库
  • # 我使用过的 HTML + CSS 实践总结笔记(含说明)