hakono:无意间发现的一个写法
type T struct {
t int
}
func (t T) NewT(tValue int) T {
return T{t: tValue}
}
func main() {
t := T.NewT(T{},999)
fmt.Println(t)
}
输出 {999}
没有结构体实例,但是却可以直接调用类型来调用对应的方法
t := T.NewT(T{},999)
这写法有点像调用静态方法
通过一些测试可以知道第一个参数的 T{} 必须存在,传入的第一个参数会被当成方法的 reciver 传入方法中(莫非 go 语言是通过这种机制实现的方法调用)
如果方法不去管传入的 reciver 的话,这种写法似乎可以实现类似调用静态方法的写法?
翻了下似乎没找到这种写法的说明,不知道官网有没有对应的地方介绍(也可能是我没找对地方)
cmdOptionKana:https://golang.org/ref/spec
That function may be called normally with an explicit receiver, so these five invocations are equivalent:
t.Mv(7)
T.Mv(t, 7)
(T).Mv(t, 7)
f1 := T.Mv; f1(t, 7)
f2 := (T).Mv; f2(t, 7)
SingeeKing:Python 和 rust 都是这样
Go 使用函数类型实现接口的方式,其它语言有类似的实践吗?FutherAll:试了下 Swift 是不行,因为 Swift 需要显示的继承 protocol 才可以。 Python 可以吗?FutherAll:像 Go 的 http 的标准库 HandlerFunc 实现 Handler 接口这样![go.png]( https://s1.ax1x.com/2020/10/04/0Gai59.png)Swift 好…
学 GO 的一起交流K120:对 Golang 感兴趣的小伙伴们加入进来一起学习,共同成长。 此贴不讨论任何内容,谢谢。 或者加我拉你进群。
求问 Go 设置结构体属性的样式hjahgdthab750:实际在用的时候似乎有两种形式,但是不知道那种更优或者各自的场景 type A { X string B string } func (a *A) SetX (error) {} func (a A) GetX (string,error) {} func NewA() { a = A{} // 第一种 a.X,err = a.Ge…
Go 中怎么实现类似 Java 里的枚举类型?woostundy:用定义常量来实现枚举类型,太简易了。没法通过值找到枚举名称,没法约束值范围,没法输出所有可选枚举值。 试过在自定义类型上面加 String(), All() 方法,但代码又多又丑陋。 有什么好的写法或者第三方包能实现吗?scnace:code generation (逃 lbp0200:直接复制粘贴了type Direction intc…
超火爆的 go 微服务框架推荐kevinwan:go-zero 内置完整微服务治理能力,千万级日活实践检验,工具自动生成微服务,只需编写业务代码即可 开源一个月即获 1.3k stars 项目地址: https://github.com/tal-tech/go-zero 快速开始: https://github.com/tal-tech/go-zero/blob/master/doc/b…