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

golang的包和闭包

  1. 在实际开发中,往往把一系列同类型的函数放在一个包里,比如说都跟数据库有关的,都跟登录有关的之类,便于管理,控制函数,变量的范围
    此时,要想其它文件使用这些函数,就需要引入包
  2. 多人共同开发时,在不同包里,有同名函数,是完全可以的
  3. go的每一个文件都属于一个包

如何引入

例如一个包名为util
引入时就是
import 包的路径
用包的函数时,util.函数名(这里的函数名首字母要大写,使该函数可导出,也就是其它语言所说的public,可以不同包间互相调用)

使用细节

  1. 包名常常与文件夹名一致,也可以不同,常小写
  2. 包可以有别名,当包名较长时,我们往往会选择使用别名,如果给了别名,原名就不能够使用了
    代码示例:
    import(
    util “包的路径”
    )
    那么这个包的别名就是util
  3. 在同一个包中的不同文件,不能有同名函数和全局变量
  4. 如果要编写可执行文件,就需要将包声明为main,即package main,这是语法规范,如果是写库,包名可以自定义

闭包

基本介绍

闭包:指的是一个函数与其相关的引用环境,所组合而成的一个整体(实体)
说通俗些:一个函数,和用到函数外的一些变量,共同组成一个整体就叫闭包

讲解

由于闭包略显抽象,以案例讲解
代码本例:
func AddUpper() func(int) int {
var n = 10
return func(x int) int {
n = n + x
return n
}
}
func main() {
f := AddUpper()
fmt.Println(f(1))
fmt.Println(f(2))
fmt.Println(f(3))
}
输出结果为:
11
13
16

说明:

  1. AddUpper是一个函数,而它的返回值是func(int) int
  2. 上面这段代码中,作为闭包的部分是:
    var n = 10
    return func(x int) int {
    n = n + x
    return n
    }
    这里返回了一个匿名函数,但是这个匿名函数里面引用到了函数外的n,因此这个匿名函数就和这个n形成一个整体,构成闭包
  3. 一个理解思路:将闭包视作一个类,而函数则是这个类的一个操作,n是字段
  4. 上述这段代码中,虽然f函数执行了三次,但是n的初始化只进行了开头一次,每次调用进行的都是累加操作
  5. 要想弄清闭包的关键,就要分析返回的函数它使用的(引用)到哪些变量,因为这些变量和这个函数本身共同构成闭包

闭包的代码示例,与好处分析

func makeSuffix(suffix string) func(string) string {
return func(name string) string {
if strings.HasSuffix(name, suffix) {
return name
} else {
return name + suffix
}
}
}
func main() {
//返回一个闭包
f := makeSuffix(“.jpg”)
fmt.Println(f(“lsh”))
fmt.Println(f(“lshsasda.jpg”))
}

  1. 这段代码中的匿名函数,和makeSuffix函数的suffix值构成了一个闭包,因为这个匿名函数引用了这个suffix值
  1. 闭包在输入某些固定先决条件时,可以更便于理解和使用,只需要传一次固定值
http://www.dtcms.com/a/312300.html

相关文章:

  • 【Linux】linux基础开发工具(三) 版本控制器Git、调试器 - gdb/cgdb使用、一些实用的调试技巧
  • Libevent(5)之使用教程(4)工具
  • 二叉树的锯齿形层次遍历
  • 日语学习-日语知识点小记-进阶-JLPT-真题训练-N1阶段(2):018年7月-JLPT-N1
  • TI 毫米波雷达开发:(四)毫米波雷达板开发所需软件
  • 记一次v-if和key错误使用,导致vue2的内存爆炸修复!
  • 著作权登记遇难题:创作者如何突破确权困境?
  • 【论文阅读|V2M: VISUAL 2-DIMENSIONAL MAMBA FOR IMAGE REPRESENTATION LEARNING】
  • 字节-面试
  • 性能测试工具ApacheBench、Jmeter
  • gitee使用教程
  • 昇思学习营-开发版-模型推理和性能优化
  • 在 Elasticsearch 中使用 LTR 参与检索
  • k8s+isulad 国产化技术栈云原生技术栈搭建3-master节点安装
  • 查找位置函数
  • 垃圾收集器G1ZGC详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 77-1(题目+回答)
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 76-1(题目+回答)
  • set和map使用
  • 技巧|SwanLab记录混淆矩阵攻略
  • express-jwt报错:Error: algorithms should be set
  • 【智能体cooragent】不同的单智能体调用的大模型的推理的输入与输出
  • 笔试——Day26
  • 【LLM】如何在Cursor中调用Dify工作流
  • Makefile 从入门到精通:自动化构建的艺术
  • 【Java基础知识 16】 数组详解
  • 微积分思想的严密性转变 | 极限、逼近与程序化
  • 计算机技术与软件专业技术资格(水平)考试简介
  • 【Pytorch✨】LSTM01 入门
  • 集成电路学习:什么是HAL硬件抽象层