0

0

go语言中fn是什么

小老鼠

小老鼠

发布时间:2023-04-17 11:46:51

|

2950人浏览过

|

来源于php中文网

原创

go语言中fn具体指的是关键字func,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块,函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。

go语言中fn是什么

本教程操作系统:Windows10系统、GO1.20版、Dell G3电脑

Go语言函数声明(函数定义)

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率。Go 语言支持普通函数、匿名函数和闭包,从设计上对函数进行了优化和改进,让函数使用起来更加方便。

函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块。

立即学习go语言免费学习笔记(深入)”;

因为Go语言是编译型语言,所以函数编写的顺序是无关紧要的,鉴于可读性的需求,最好把 main() 函数写在文件的前面,其他函数按照一定逻辑顺序进行编写(例如函数被调用的顺序)。

编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务来解决,而且,同一个任务(函数)可以被多次调用,有助于代码重用(事实上,好的程序是非常注意 DRY 原则的,即不要重复你自己(Don't Repeat Yourself),意思是执行特定任务的代码只能在程序里面出现一次)。

当函数执行到代码块最后一行}之前或者 return 语句的时候会退出,其中return语句可以带有零个或多个参数,这些参数将作为返回值供调用者使用,简单的return语句也可以用来结束for的死循环,或者结束一个协程(goroutine)。

Go语言函数不需要声明

Go语言的函数是一等公民,和变量一样,可以赋值给某一变量(匿名函数产生的原因)

由于函数是一等公民, 所以以前定义变量所有的格式, 都可以用于定义函数类型的变量

    var 变量名称 函数类型
    var 变量名称 函数类型 = 匿名函数
    var 变量名称  = 匿名函数
    变量名称  := 匿名函数
    var(
        var 变量名称  = 匿名函数
    )
fn = func (a,b int){
    return a + b
}
fn()

Go语言中函数变量定义的方式和C语言不一样

格式: func函数名称( 形参列表 ) 返回值列表{}

Go语言中函数返回值可以不止一个

func test(a,b int) (a,b int){
    return a,b
}

Go语言函数返回值可以只写类型,也可以写变量+类型

只写类型:func test(a,b int) (int){} 注意:只写类型,返回值类型int两边的括号可以省略

变量加类型:func test(a,b int) (a,b int){}
注意点:当写变量+类型的形式时,return可以不加返回值,会自动寻找代码块的a和b

func test(a,b int) (a,b int){
      a = 100
      b = 99
      return //自动返回100,99}

Go语言形参列表或者返回值列表的类型如果相同,那么我们可以连续定义
如下:两个函数表示同一种方法

func test(a,b int) (a,b int){return a,b}
func test2(a int,b int) (int,int){return a,b}

由于Go语言函数可以有多个返回值,那么外界接收函数多个返回值的时候需要用多个变量来接收,但是Go语言中变量不使用会报错,所以我们如果有一个返回值不需要使用时,我们会用 _ 来接收, _ 在Go语言中有特定的含义,所以不能用作变量的标识符

匿名函数

PHP开发实用指南 2.0
PHP开发实用指南 2.0

对于一个刚进入PHP 开发大门的程序员,最需要的就是一本实用的开发参考书,而不仅仅是各种快速入门的only hello wold。在开发的时候,也要注意到许多技巧和一些“潜规则”。PHP是一门很简单的脚本语言,但是用好它,也要下功夫的。同时,由于PHP 的特性,我一再强调,最NB 的PHP 程序员都不是搞PHP 的。为什么呢?因为PHP 作为一种胶水语言,用于粘合后端 数据库和前端页面,更多需

下载

匿名函数就是没有名称的函数,定义后需要立即使用否则会报错

匿名函数通常情况只用做一次,由于是一等公民,可以作为函数的形参或者作为函数的返回值

作为函数的形参

fn  := func (a,b int) int {
  return a + b
}

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,fn)

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}

进一步演变

由于fn和是匿名函数赋值,所以我们可以直接将匿名函数传入test

//此时调用test函数用来计算a+b可以这么写
res := test(a,b,func (a,b int) int {
  return a + b
})

func test(a,b int,method func(int,int) int) func() {
  return method(a,b)
}

作为函数的返回值

fn := test()
fn()//打印匿名函数

func test() func() {
    return func() {
        fmt.Println("匿名函数")
    }
}

闭包(特殊的匿名函数)

返回的匿名函数中如果用到了外界的变量,那么就称为闭包

闭包的特点:"人在塔在"只要返回的匿名函数中用到了外界的变量,那么如果函数调用后还有使用到此匿名函数的情况,那么函数栈不会释放,一旦不再使用,函数栈才释放

fn := test()//test函数也被称为迭代器
fn()  //2
fn()  //3
fn()  //4

func test() func(){
     x := 1
     return func (){
            x++
            println(x)
        }
}

匿名函数的内存表现

QQ截图20230417114047.png

图解

  1. 代码区存放了三个函数的代码,对应有一个地址

  2. 定义变量fn,将匿名函数的地址传给了fn

  3. 调用函数test开辟存储空间

  4. 为num,value,method,res开辟存储空间,其中method保存传给它的函数的地址

  5. 执行函数,method保存了匿名函数的地址,执行method的时候开辟了存储空间,存放了a和b的值,函数结束后将值返回给res,并释放了method的存储空间

  6. 打印了res,test的函数也被释放,fn使用完毕也被释放

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.6万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.7万人学习

Go 教程
Go 教程

共32课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号