千家信息网

Go语言中基础闭包的示例分析

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关Go语言中基础闭包的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 闭包概述闭包就是解决局部变量不能被外部访问的一种解决方案
千家信息网最后更新 2025年02月23日Go语言中基础闭包的示例分析

这篇文章将为大家详细讲解有关Go语言中基础闭包的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一. 闭包概述

  • 闭包就是解决局部变量不能被外部访问的一种解决方案

  • 闭包是把函数当作返回值的一种应用

二. 代码演示

总体思想为:在函数内部定义局部变量,把另一个函数当作返回值,局部变量对于返回值函数相当于全部变量,所以多次调用返回值函数局部变量的值跟随变化。

// closure.gopackage mainimport (        "fmt"        "strings")func main() {        f := closure("http://", "com")        fmt.Printf("%T %p \n", f, f)        fmt.Println(f("baidu"))        fmt.Println(f("qq"))        fmt.Println(f("alipay.com"))        fmt.Println("")        f1 := closure("http://", "com")        fmt.Printf("%T %p \n", f1, f1)        fmt.Println(f1("baidu"))        fmt.Println(f1("qq"))        fmt.Println(f1("alipay.com"))}func closure(prefix, suffix string) func(url string) string {        pre, suf := prefix, fmt.Sprintf(".%s", suffix)        return func(url string) string {                fmt.Printf("%p %p ", &pre, &suf)                if !strings.HasPrefix(url, pre) {                        url = fmt.Sprintf("%s%s", pre, url)                }                if !strings.HasSuffix(url, suf) {                        url = fmt.Sprintf("%s%s", url, suf)                }                return url        }}

运行结果

$ go run closure.gofunc(string) string 0x4935600xc0000301d0 0xc0000301e0 http://baidu.com0xc0000301d0 0xc0000301e0 http://qq.com0xc0000301d0 0xc0000301e0 http://alipay.comfunc(string) string 0x4935600xc0000302d0 0xc0000302e0 http://baidu.com0xc0000302d0 0xc0000302e0 http://qq.com0xc0000302d0 0xc0000302e0 http://alipay.com

代码说明

第 2 行 返回的是变量 f 函数的 类型地址 ,函数在Go 语言中是引用类型。如果学过Java语言就知道,Java对象的内存空间有栈、堆、方法区、静态区。

第 3 - 5 行返回的是 pre suf 两个变量的地址,每一次调用是pre suf 地址都是不变的。

第 6 - 9 行这是新声明的 f1 变量,这时候 pre suf 的地址和上一次 f 的里面的 pre suf 地址是不一样的。

因为我们创建引用类型的变量时,其实只是一个标头值,标头值里包含一个指针,指针指向底层的数据,它所指向的底层结构没有被复制传递,这也引用类型比值类型传递更高效的原因。

关于"Go语言中基础闭包的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

变量 函数 闭包 地址 类型 语言 局部 篇文章 基础 示例 分析 代码 底层 指向 指针 更多 标头 不错 实用 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库怎么设置字段为六位型号 计算机网络技术政治优势 刺激战场体验服有多少个服务器 无锡小型软件开发价格多少 我国政府面对网络安全的立场 更新数据库表plsql 软件开发方面的职业规划 网络安全征文大学生 网络安全网贷发生后除置程序结构 数据库默认用户 数据库中引用宿主语言的程序变量 正规网络技术转让产品 关于网络安全技术的背景 软件开发相关专业技能 单机版软件开发用什么语言 怎么找数据库 社会责任报告 压缩 虚拟主机 数据库 医学类软件开发的支出都有哪些 上海软件开发公司哪家好 计算机工程师软件开发 2020年首都网络安全口号 河南福盈顺网络技术有限公司 国字号网络安全基地 打开视频加速服务器 无法与mdm服务器 怎样获取大量生产数据库 网络安全主题绘画简笔画大全 扫描识别软件开发 怎么开1.12生存服务器 855数据结构与数据库技术
0