比如 gin/redner/render.go
var (
	_ Render     = JSON{}
	_ Render     = IndentedJSON{}
	_ Render     = SecureJSON{}
	_ Render     = JsonpJSON{}
	_ Render     = XML{}
	_ Render     = String{}
	_ Render     = Redirect{}
	_ Render     = Data{}
	_ Render     = HTML{}
	_ HTMLRender = HTMLDebug{}
	_ HTMLRender = HTMLProduction{}
	_ Render     = YAML{}
	_ Render     = Reader{}
	_ Render     = AsciiJSON{}
	_ Render     = ProtoBuf{}
)
预先写这一堆的目的是什么呢?
|      1qi1070445109      2022-05-20 18:00:32 +08:00 via Android 判断实现了 render interface | 
|      2yujianwjj      2022-05-20 18:01:50 +08:00 验证 JSON 这个结构体是否实现了 Render 这个接口。如果没有实现的话,在编译的时候会报错。 | 
|  |      3Norths      2022-05-20 18:03:00 +08:00 Render 是个接口吧?为了检查是否实现了相关方法 | 
|      4iamzuoxinyu      2022-05-20 18:09:48 +08:00 相当于 static_assert ,脱裤子放屁之举。 | 
|  |      5dzdh OP 明白了。 。。一时半会儿没转过来。就是用 IDE 的时候,实现没实现在用的时候立刻就能知道了。 这是防止“出错”是吧 | 
|  |      6Buges      2022-05-20 18:26:56 +08:00 via Android 不愧是大道至简 | 
|  |      7MiketsuSmasher      2022-05-20 23:17:16 +08:00 via Android 可能相当于 python 里通过判断 `print 'hello world'` 这种语句能否执行,进而判断当前 python 版本? >>> try: ... exec("print 'hello world'") ... except SyntaxError: ... py_version = 3 ... else: ... py_version = 2 ... >>> | 
|      8acehowxx      2022-05-20 23:53:07 +08:00 via Android 因为接口是鸭子类型。灵活是灵活,但有时想编译阶段就能显示判断是否结构体实现了接口,就有了这种写法。我觉得还是不错的。在有了泛型后,go 现在最大的诟病就是错误处理的样板戏了,其实就用?判断 error 不为空就往上抛就完事了,不知道为什么拖到现在都不愿意去弄。国产七牛魔改的 go+早好几年前错误处理就这么干了。 | 
|  |      9chinaliuhan      2022-05-22 19:56:58 +08:00 @acehowxx 大佬, 这个写法叫什么名字? |