关于 nil 的一些事情
关于 nil 的一些事情
本质
示例
package nils
import (
"net"
"reflect"
"testing"
)
type TSlice []string
type IErrNil interface {
IErrNil() IErrNil
Error() string
}
type ErrNil struct {
msg string
}
func (t *ErrNil) Error() string {
return t.msg
}
func (t *ErrNil) ErrNil() *ErrNil {
return nil
}
func (t *ErrNil) IErrNil() IErrNil {
return nil
}
func (t *ErrNil) PrintMsg() string {
if t == nil {
return "<nil>"
}
return t.msg
}
func (t ErrNil) PrintMsgV2() string {
return t.msg
}
func Test_Nil(t *testing.T) {
var err error
var t ErrNil
t.PrintMsg()
t.PrintMsgV2()
tmp := ErrNil{}
err = tmp.ErrNil()
if err == nil {
t.Logf("(ErrNil == nil) ok: %v, err: %v", err == nil, err)
} else {
t.Errorf("(ErrNil == nil) err: %v, err: %v, type(err): %v", err == nil, err, reflect.TypeOf(err).Kind())
}
err = tmp.IErrNil()
if err == nil {
t.Logf("(IErrNil == nil) ok: %v, err: %v", err == nil, err)
} else {
t.Errorf("(IErrNil == nil) err: %v, err: %v, type(err): %v", err == nil, err, reflect.TypeOf(err).Kind())
}
ip := net.ParseIP("111.1.111")
if ip == nil {
t.Logf("(ip == nil) ok: %v, err: %v, type(ip): %v", ip == nil, ip, reflect.TypeOf(ip).Kind())
} else {
t.Errorf("(ip == nil) err: %v, err: %v, type(ip): %v", ip == nil, ip, reflect.TypeOf(ip).Kind())
}
}第一个问题
关于第二个问题:
关于第三个问题:
Last updated