golang學習筆記之-fmt.Println源碼print.go簡單探索

看下error接口

// error接口
type error interface {
    Error() string
}

實現error接口

package main

import "fmt"

type fileError struct {
}
//https://blog.csdn.net/Maggie_up有問題歡迎指正!
func (fe *fileError) Error() string {
    return "文件錯誤"
}

func main() {
    fmt.Println(&fileError{})
}
// 最后打印結果:文件錯誤
  • 實現了接口,并沒有調用Error()方法為什么會調用呢?尼瑪不是要初始化結構體,再調用方法?這里一看代碼木有調用啊,只初始化了下而已。怎么自動調用了?

1.這是fmt.println函數在內部調用Error()方法
2.在源碼fmt--->print.go這個文件中

//print.go 部分代碼:
//Stringer接口
type Stringer interface {
    String() string
}

......
    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
            }                       

修改代碼實現Stringer接口測試,看會不會調用String()方法:

package main

import "fmt"

type fileError struct {
}
//https://blog.csdn.net/Maggie_up有問題歡迎指正!
func (fe *fileError) String() string {
    return "字符串"
}

func main() {
    fmt.Println(&fileError{})
}
//打印:字符串  調用了String()方法

簡單理解:fmt.Println會在內部調用Error()和String()方法,而且Error()方法有優先權。

  • 可以debug模式調試下,不想看詳細的按F8(詳細按F7)跑


    在這里插入圖片描述
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 安裝 官網下載地址:https://golang.org/dl/ ,根據系統平臺下載對應資源包,安裝或解壓到對應目...
    魚籽灬閱讀 728評論 0 0
  • 第一章五個程序 都很好!但是初學編程/沒有其他語言基礎的不容易看懂。 記一遍不熟悉的東西: who = strin...
    暗黑破壞球嘿哈閱讀 1,444評論 0 10
  • 一、數據類型轉換 https://studygolang.com/articles/10838 package m...
    蓓蓓的萬能男友閱讀 1,104評論 0 1
  • 今天早上改了卷子,完成了天一卷子的分析。下午我們歷史組在兀老師倡議下,去了平陸縣的傅說祠,隨后吃過晚飯,就步行去了...
    三門峽383何麗娜閱讀 465評論 0 50
  • Android 系統在完成啟動后,會發射一個ACTION_BOOT_COMPLETED的廣播,并且這個廣播只...
    Flyppy閱讀 7,444評論 2 1