Open geektutu opened 3 years ago
赞
今天看Gee框架的第一章,自己写的时候就发现这个奇怪的玩意儿了。刚好好奇点进来这个附录,没想到就看到大佬的解析!关于应用以及好处,讲得有理有据!
还是没能理解接口
这块想了很久,其实学过java的要理解很简单。 java最早是不支持给接口参数里传函数的,其实1.8之后就是对函数式接口做了些处理,使得可以直接穿匿名函数/lambda表达式。 golang也是为了向接口参数里传函数,所以取了个巧,让函数继承了接口,从而接口型函数可以接受(转换自)匿名函数,从而名正言顺地往接口里传函数,否则其实是类型不匹配的。
方式一是表现出接口型函数的实际使用情况。方式二讲的是接口使用上的便捷情景,其实和接口型函数无关。一开始看无脑代入标题,硬是都往接口型函数用法上凑,反而懵逼了。
最近看书刚好看到这个写法,一开始不太理解这样子写的作用,觉得很繁琐,后面想到java8中的函数式接口
其实就是方便直接传入函数作为参数
非常像 typescript 里的函数接口声明
interface Getter {
get(key: string): [byte: string[], error: Error]
}
interface GetterFunc extends Getter {
(key: string): [byte: string[], error: Error]
}
// 实现
const getterFunc: GetterFunc = (key: string) => {
return [[key], new Error('error')]
}
getterFunc.get = (key: string) => getterFunc(key)
function getFromSource(getter: Getter, key: string): string[] {
const [byte, error] = getter.get(key)
if (error) {
throw error
}
return byte
}
@squallsyttt 方式一是表现出接口型函数的实际使用情况。方式二讲的是接口使用上的便捷情景,其实和接口型函数无关。一开始看无脑代入标题,硬是都往接口型函数用法上凑,反而懵逼了。
我也想说,方式二跟接口型函数没关系啊,哪里体现出了接口型函数的便捷性了?
讲的好好诶,学习了
面向接口编程
是的,只要实现了这个接口的任何类型(除了interface类型以外)都可以作为参数传递给函数使用
祧轩辕世胄少武礽泰 @.***
------------------ 原始邮件 ------------------ 发件人: "geektutu/blog" @.>; 发送时间: 2023年2月19日(星期天) 中午12:25 @.>; @.**@.>; 主题: Re: [geektutu/blog] Go 接口型函数的使用场景 | 极客兔兔 (#102)
@taka250 其实就是方便直接传入函数作为参数
一下子理解了
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
https://geektutu.com/post/7days-golang-q1.html
Go 语言/golang 中函数式接口或接口型函数的实现与价值,什么是接口型函数,为什么不直接将函数作为参数,而是封装为一个接口。Go 语言标准库 net/http 中是如何使用接口型函数的。