var err interface{}
err = openldap.LdapAPiSrv.AddUserEntry(staff)
e := err.(*ldap.Error)
if e.ResultCode == 68{
fmt.Println(err)
}
如上代码中第二行返回的是
type error interface {
Error() string
}
这个类型无法直接获取到*ldap.Error的ResultCode,结构体如下:
type Error struct {
// Err is the underlying error
Err error
// ResultCode is the LDAP error code
ResultCode uint8
}
于是我们先定义一个var err interface{},先用接口类型接受go自带的error类型的变量,然后再对该接口进行类型断言。
e := err.(*ldap.Error)
然后就可以获取到变量err的*ldap.Error的属性了,这一点和python等动态语言不同,go是一门静态语言,要在编译时就确定语言类型,调用不属于该类型的属性会出现类型错误。