Go 編譯器檢測型別是否實現指定介面

2021-10-23 11:19:04 字數 1017 閱讀 6655

開源庫里會有一些類似下面這種奇怪的語法:

var

_ io.writer =

(*mywriter)

(nil

)var

_ io.writer = mywriter

這時候會有點懵,這其實是 編譯器檢查 *mywriter 型別是否實現了 io.writer 介面。

來看乙個例子:

package main

import

"io"

type mywriter struct

/*func (w mywriter) write(p byte) (n int, err error) */

func

main()

}

注釋掉為 mywriter 定義的 write 函式後,執行程式:

src/main.go:

14:6: cannot use (

*mywriter)

(nil)(

type

*mywriter) as type io.writer in assignment:

*mywriter does not implement io.writer (missing write method)

src/main.go:

15:6: cannot use mywriter literal (

type mywriter) as type io.writer in assignment:

mywriter does not implement io.writer (missing write method)

報錯資訊:*mywriter/mywriter 未實現 io.writer 介面,也就是未實現 write 方法。

解除注釋後,執行程式不報錯。

實際上,上述賦值語句會發生隱式地型別轉換,在轉換的過程中,編譯器會檢測等號右邊的型別是否實現了等號左邊介面所規定的函式。

configure 指定編譯器

對於autotools來生成makefile的程式包,不建議修改makefile來指定gcc g 的版本。最佳方案 configure cc 你想使的c編譯器的絕對路徑 configure cxx 你想使的c 編譯器的絕對路徑 比如 configure cxx usr local bin g 這樣就...

configure 指定編譯器

對於autotools來生成makefile的程式包,不建議修改makefile來指定gcc g 的版本。最佳方案 configure cc 你想使的c編譯器的絕對路徑 configure cxx 你想使的c 編譯器的絕對路徑 比如 configure cxx usr local bin g 這樣就...

Go語言編譯器安裝

臨近回家的日子,在公司比較清閒,所以找來google新出的go語言研究研究,也是看到最新出來的程式語言排名,竟然公升到了13,一下激起了我的興趣,閒話少出。參考文章 http golang.org doc install.html 關於go語言的介紹就不在這裡羅嗦,網上會有很多,我只記錄一下我的安裝...