内容简介:1.这是fmt.println函数在内部调用Error()方法2.在源码fmt--->print.go这个文件中
来看一段代码,实现了error接口
package main
import "fmt"
type fileError struct {
}
func (fe *fileError) Error() string {
return "文件错误"
}
func main() {
fmt.Println(&fileError{})
}
// 最后打印结果:文件错误
- 实现了接口,并没有调用Error()方法为什么会调用呢?尼玛不是要初始化结构体,再调用方法?这里一看代码木有调用啊,只初始化了下而已。怎么自动调用了?
1.这是fmt.println函数在内部调用Error()方法
2.在源码fmt--->print.go这个文件中
//print.go 部分代码:
switch v := p.arg.(type) { //类型断言:error接口会调用Error()方法,Stringer接口会调用String()方法
case error:
handled = true
defer p.catchPanic(p.arg, verb)
p.fmtString(v.Error(), verb)
return
case Stringer:
handled = true
defer p.catchPanic(p.arg, verb)
p.fmtString(v.String(), verb)
return
}
修改代码测试,看会不会调用String()方法:
package main
import "fmt"
type fileError struct {
}
func (fe *fileError) String() string {
return "字符串"
}
func main() {
fmt.Println(&fileError{})
}
//打印:字符串
简单理解:fmt.Println会在内部调用Error()和String()方法,而且Error()方法有优先权。
-
可以debug模式调试下,不想看详细的按F8(详细按F7)跑
image.png
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Servlet & JSP Cookbook
Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99
With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!