go 支持用结构体对象调用接收指针类型的方法的版本
原本认为接收类型为指针的方法只能接收指针调用,但事实并非如此。在 go 中,可以通过中间变量隐式转换,使用结构体对象调用接收指针类型的方法。
此功能在 go 的所有版本中都支持,意味着从 go 1.0 开始就可用。直接使用字面量调用这种方法是不被允许的,但通过中间变量则可以。
举个例子:
package main import "fmt" type printer interface { print() } type foo struct { i int } func (f *foo) print() { f.i = 2 fmt.println(f) } func main() { f1 := foo{} var f2 any = f1 if _, ok := f2.(printer); ok { fmt.println("ok") } f1.print() fmt.println(f1) }
这段代码编译输出:
OK {2} {2}
这表明,虽然直接用字面量调用 foo{}.print() 会报错,但通过中间变量 f1 调用 f1.print() 却是允许的。
因此,go 从所有版本开始就支持用结构体对象调用接收指针类型的方法,但需要注意可寻址性(addressable)相关规则。
使用 IBM fp-go 进行 Go 函数式编程:显式错误处理
AES加密后是否需要再用HMAC哈希,这与所使用的加密模式有一定关系,但主要取决于你所希望达到的安全目标。加密模式的考虑:CBC模式(密码块链接模式):在CBC模式下,AES加密可以提供保密性,但不提供完整性和真实性验证。为了确保数据的完整性和真实性,通常需要在AES加密后使用HMAC(例如HMAC-SHA256)进行消息认证。GCM模式(Galois/Counter模式):GCM模式本身集成了认证和加密功能,因此在使用AES-GCM时,你可以获得保密性和完整性。在这种情况下,通常不需要额外的HMAC,因
Docker Compose 为什么要从 Python 转向 Go 语言?
Go语言float64精度丢失:如何保证JSON输出保留两位小数?
golang框架性能优化与故障排查
Go语言中,如何组织同一包下的多个文件?