免费网站整站模板源码wordpress 帝国备份

张小明 2025/12/31 11:21:35
免费网站整站模板源码,wordpress 帝国备份,广州商务网站建设,网站范例大家好#xff0c;我是煎鱼。今天给大家分享一个 Go1.26 即将带来的实用新特性—— new(expr) 表达式支持。相信写过 Go 的同学都有过这样的经历#xff1a;创建一个结构体指针很简单#xff0c;但要创建一个基本类型的指针就得多写好几行代码。还是挺烦人的。这个特性能解决…大家好我是煎鱼。今天给大家分享一个 Go1.26 即将带来的实用新特性——new(expr)表达式支持。相信写过 Go 的同学都有过这样的经历创建一个结构体指针很简单但要创建一个基本类型的指针就得多写好几行代码。还是挺烦人的。这个特性能解决日常开发中的小痛点。背景在 Go 中如果我们想创建一个指向结构体的指针可以这样写type Person struct { name string } p : Person{name: alice}非常简洁优雅。但如果我们想创建一个指向基本类型值的指针呢就得这么写n : 42 p : n或者用new函数p : new(int) *p 42看起来就很不协调对吧为什么创建复合类型的指针可以一步到位而基本类型就得多写一个临时变量或者两行代码这个问题其实在社区里讨论了很久。早在 2014 年的 issue #9097[1]就有人提出过但当时被驳回了。为什么不能直接写 3可能有同学会问为什么不直接支持p : 3这种写法呢问题就出在类型系统上。在 Go 中数字字面量3是一个无类型常量(untyped constant)它本身没有确定的类型。只有在赋值或者运算时编译器才会根据上下文推断出具体类型。如果允许3这种写法编译器就不知道该分配什么类型的内存空间 —— 是int、int64还是float64这会带来类型歧义所以这条路走不通。新提案扩展 new 函数Go 团队最终采纳的方案是让new函数不仅可以接受类型参数还可以接受表达式参数。快速例子p1 : new(int, 3) p2 : new(rune, 10) p3 : new(Weekday, Tuesday) p4 : new(Name, unspecified) ... and so on语法规则新的new函数行为如下如果参数expr是一个类型为 T 的表达式或者是一个默认类型为 T 的无类型常量表达式那么new(expr)会分配一个类型为 T 的变量将其初始化为expr的值并返回其地址(类型为*T)如果参数是类型 T那么new(T)会分配一个初始化为零值的 T 类型变量(这是原有行为)简单来说就是new现在既能接受类型也能接受值了。代码示例基本类型指针以前我们得这么写// Go 1.25 n : 42 p1 : n fmt.Println(*p1) // 42 s : go p2 : s fmt.Println(*p2) // go现在可以直接// Go 1.26 p1 : new(42) fmt.Println(*p1) // 42 p2 : new(go) fmt.Println(*p2) // go复合类型指针对于切片这类复合类型也同样适用// Go 1.25 s : []int{11, 12, 13} p1 : s fmt.Println(*p1) // [11 12 13] type Person struct{ name string } p2 : Person{name: alice} fmt.Println(*p2) // {alice}新写法// Go 1.26 p1 : new([]int{11, 12, 13}) fmt.Println(*p1) // [11 12 13] type Person struct{ name string } p2 : new(Person{name: alice}) fmt.Println(*p2) // {alice}函数返回值指针这个场景以前特别麻烦// Go 1.25 f : func() string { return go } v : f() p : v fmt.Println(*p) // go现在一行搞定// Go 1.26 f : func() string { return go } p : new(f()) fmt.Println(*p) // go需要注意的是传入nil仍然是不允许的p : new(nil) // 编译错误实现原理其实这个特性的实现思路很简单。当你写p : new(42)编译器会将其转换为类似这样的操作var _tmp 42 p : _tmp或者等价于p : new(int) *p 42也就是说new(expr)本质上是为非可寻址的表达式显式分配存储空间然后返回其地址。这样就统一了创建指针的方式不管是基本类型还是复合类型都可以用类似的语法。社区讨论中的另一个方案其实在 proposal 讨论过程中Rob Pike 还提出了另一个有趣的方案让类型转换变得可寻址。比如可以这样写p1 : int(3) p2 : rune(10) p3 : string(hello)这个方案的逻辑是类型转换必然会创建新的存储空间(因为要改变类型)所以让它可寻址是合理的。不过最终 Go 团队选择了扩展new的方案可能是考虑到new函数的语义本身就是分配并初始化扩展它更自然。避免引入新的语法歧义。保持运算符语义的一致性。实际应用场景这个特性虽然看起来简单但在实际开发中还是挺有用的。比如1. 配置选项很多第三方库的配置结构体中会有指针类型的字段用来区分未设置和设置为零值type Config struct { Timeout *int MaxRetry *int } // Go 1.25 timeout : 30 config : Config{ Timeout: timeout, MaxRetry: new(int), // 只能用 new(int) 表示 0 } // Go 1.26 config : Config{ Timeout: new(30), MaxRetry: new(0), }2. 测试代码在单元测试中构造测试数据时这个特性能让代码更简洁testCases : []struct { input *int expected string }{ {new(42), success}, {new(0), zero}, {nil, nil}, }3. 内联指针创建在函数调用时需要传指针参数// Go 1.25 func process(val *string) {} s : data process(s) // Go 1.26 process(new(data))总结new(expr)这个特性解决了 Go 中创建基本类型指针时的不便让代码更简洁一致。虽然改动不大但确实提升了开发体验。这个特性将会在 Go1.26 版本正式发布由 Alan Donovan、Ian Lance Taylor、Rob Pike 等核心团队成员推动完成。对于我们 Go 开发者来说以后写代码可以少定义临时变量了代码也会相对干净些。花了 11 年啊。绝了真的服了。参考资料[1]#9097:https://github.com/golang/go/issues/9097关注和加煎鱼微信一手消息和知识拉你进技术交流群你好我是煎鱼出版过 Go 畅销书《Go 语言编程之旅》再到获得 GOPGo 领域最有观点专家荣誉点击蓝字查看我的出书之路。日常分享高质量文章输出 Go 面试、工作经验、架构设计加微信拉读者交流群和大家交流原创不易 点赞支持
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

云计算 网站建设api接口开发网站开发

Wan2.2-T2V-A14B能否生成法庭审判情景再现? 你有没有想过,未来的法院培训视频不再需要请演员、搭布景、反复排练?而是输入一段文字描述,几秒钟后,一场高度还原的“虚拟庭审”就在屏幕上自动上演——法官敲槌、律师陈词…

张小明 2025/12/27 5:28:53 网站建设

免费设计装修网站西安网站 建设

云计算:是旧瓶装新酒吗? 1 引言 在当今科技飞速发展的时代,云计算成为了热门话题。但市场上的各种声音让人难以分辨什么是真正的云计算,什么是新的概念,什么只是换了个说法。本文将探讨云计算的本质、发展历程以及它与其他相关概念的区别。 2 市场乱象与似曾相识的场景…

张小明 2025/12/31 11:13:54 网站建设

建设银行网站怎么取消短信服务做除尘骨架的网站

二分查找是高效解决有序/局部有序数组问题的经典算法,核心思想是通过不断缩小“可能包含目标的区间”,将时间复杂度从暴力遍历的 O(n)O(n)O(n) 优化到 O(log⁡n)O(\log n)O(logn)。 它的适用场景非常广泛:不仅能解决“查找目标值”这类基础问…

张小明 2025/12/27 5:31:44 网站建设

中山网站建设文化报价wordpress模板开发文档

探索CDF:网络频道订阅与管理全攻略 1. 网络订阅的优势与工具对比 在网络浏览中,用户希望具备以下能力: - 更好地跟踪所订阅的网站。 - 当频道或收藏夹更新时接收通知。 - 在线或离线查看系统上的内容。 曾经,Netscape仅提供原始的手动网站/书签检查工具。虽然它最近开…

张小明 2025/12/27 5:28:57 网站建设

邯郸企业做网站推广宁波营销型网站建设

一、功能概述 喝水记录应用的核心价值之一是“让数据说话”。用户不仅希望看到当天喝了多少水,还希望了解最近一周、一个月的整体趋势,以及不同类型、不同容器的喝水分布。本篇文章以“统计概览”页面为例,介绍如何在 Cordova Web 层 汇总多维…

张小明 2025/12/31 4:29:35 网站建设

wordpress删除站点推广公众号平台的公司

近年来,低代码开发凭借“降本提效”的核心优势,成为企业数字化转型的重要工具。无需深厚编程基础,通过可视化拖拽、预置模板即可快速搭建应用,大幅缩短开发周期。以下为大家盘点5款各具特色的低代码平台,涵盖从中小团队…

张小明 2025/12/27 5:28:59 网站建设