在go v1.18中,interface有了一个别名any。所以在说 interface 和 any 的时候, 其实说的是相同的东西。 interface的使用场景到处都是。还记得我们之前说的JSON和YAML的配置文件处理吗? 代码语言:javascript 复制 // json.MarshalfuncMarshal(v any)([]byte,error){// ...} 看完文章, 你至少应该知道 什么是鸭...
前言:在探索 Go1.18 的泛型特性时,我们发现了一个新关键字 any,它实际上是对 interface{} 的别名。使用 any 而非 interface{} 在常规代码中显得更为便捷,因为它简化了代码书写,减少了输入量,提高了编写效率。但同时,any 的引入也引发了一些关注,特别是在代码一致性和可读性方面。从使用层面...
gofmt -w -r 'interface{} -> any' ./... 复制代码 听到这个消息时,我的朋友咸鱼就大惊了,在想 interface{} 会不会成为历史,被新的关键字 any 完全替代? 显然,答案是不会的。因为Go1 有兼容性的保证,肯定不会在现阶段删除。不过后续会出现一个现象,就是我们的 Go 工程中,有人用 any,有人用...
funcEating(v any){v.Eat()// output: ???}funcWhoAreYou(v any){// ???} 1. 2. 3. 4. 5. 6. 7. 接口定义 我们回到作业要求, 要求实现动物和人两种接口。 要求 动物接口需要实现吃这个动作。 typeAnimalinterface{Eat()} 1. 2. 3. 人接口除了需要吃之外, 还需要读书这个动作。 typeHumaninter...
常见错误和最佳实践 Go语言中,没有方法的接口类型是空接口,也就是大家熟知的interface{}。 从Go 1.18开始,定义了一个预声明标识符(Predeclared identifiers):any。 any实际上是空接口的别名,所以任何用了interface{}的地方都可以把interface{} 替换为any。 func main() { var i any i = 42 i = "foo" i...
答案在于Russ Cox在2021年12月1日对Go语言项目的一次commit,他将Go项目中所有interface{}替换为any。interface{}在Go中是空接口,任何类型的实例都可以赋值给空接口变量。为何Go团队会在Go 1.18 beta1发布前采取此行动?any的引入主要是考虑到Go 1.18引入了泛型后的影响。使用interface{}作为类型参数...
从使用层面来讲,新的关键字 any 会比 interface{} 方便不少,毕竟少打了好多个词,更快了,其实也是参照现有 rune 类型的做法。 大家好,我是煎鱼。 在看Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any。 例子如下: 复制 func Print[Tany](s []T) {} ...
Beta1 版本中引入的类型别名 (type alias) 语法紧密相关,该语法是为了支持泛型而设计的。引入泛型支持是 Go 语言发展过程中的重要一步,旨在增强语言的灵活性和表达能力。通过使用 'any' 替代 'interface{}',Go 开发团队进一步优化了代码的可读性和一致性,同时为未来更多泛型特性的引入奠定了基础。
我们在日常的工程中,也可以和他们一样,直接借用 Go 工具链来实现替换。 如下: gofmt-w-r'interface{}->any'./... 听到这个消息时,我的朋友咸鱼就大惊了,在想 interface{} 会不会成为历史,被新的关键字 any 完全替代? 显然,答案是不会的。因为Go1 有兼容性的保证,肯定不会在现阶段删除。不过后续会出...
Go使用'any'替代interface{},为泛型而变更 出品| OSC开源社区(ID:oschina2013) 最新发布的 Go 1.18 Beta 1 包含一个值得关注的 commit,它由 Go 开发团队技术 leader Russ Cox 提交,commit 内容是使用 gofmt 命令将 Go 源代码中的所有 'interface{}' 替换为 'any'。