我有一種情況,變量“err error”值的值只能是“nil”,但一旦被重新分配就斷言“(err == nil) == false”。示例代碼如下:package mainimport ( "fmt" "log")type TestError struct { Message string}func (e *TestError) Error() string { return e.Message}func NewTestError(err error) *TestError { if err == nil { return nil } log.Printf("NewTestError( ... ): creating new NewTestError err = %s", err) return &TestError{Message: err.Error()}}func main() { var err error _, err = fmt.Printf("excuse.\n") err = NewTestError(err) log.Printf("main( ... ): err == nil. %v", (err == nil)) log.Printf("main( ... ): err = %#v", err)}我從上面的代碼中得到以下輸出:excuse.2015/07/30 08:28:28 main( ... ): err == nil. false2015/07/30 08:28:28 main( ... ): err = (*main.TestError)(nil)最后兩行如何輸出?
2 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊
在第二種情況下,您正在打印接口實例信息,即類型和值,類型為(*main.TestError)
value 為(nil)
。在第一種情況下,您實際比較的不是nil
因為它也是界面。
- 2 回答
- 0 關(guān)注
- 324 瀏覽
添加回答
舉報
0/150
提交
取消