Golang中的struct还是有点意思的,相比于C++中的类型要好用很多。
Golang的数据成员放到一个struct中,又为该struct配上相应的方法,这就形成了封装数据成员和方法的class。
相比于C++,Golang没有继承,而是支持嵌套,以组合的形式完成相同的功能,这就使Golang的逻辑非常清晰。
遇到的问题
最近在写程序时碰到了一个小问题,让我困惑了一下。这里只是想判断fileMeta是否为空,便使用==nil来判断,但是发现struct不能和nil比较,原因是不能将nil转换为struct。
其实这个问题应该放在nil相关的问题中,但是思来想去还是放在struct里吧。(nil这个东西真的是,,一言难尽)
struct也不能赋值为nil,如 var s Student = nil ,会报错告诉我们不能这样分配。而struct指针是可以的,如var s *Student = nil
在琢磨这个问题的时候也找了不少资料,又对golang的struct有了新的认识,或者说是补充一些漏洞。
var s Student{}
type S Student {}
type S struct{}
func (s *S) addr() { fmt.Printf("%pn", s) }
func main() {
var a, b S
a.addr() // 0x1beeb0
b.addr() // 0x1beeb0
}
ch := make(chan struct{})
var x [100]int
var y [100]struct{}
fmt.Println(unsafe.Sizeof(x)) //800
fmt.Println(unsafe.Sizeof(y)) //0
func (f FileMeta) IsEmpty() bool {
return reflect.DeepEqual(f, FileMeta{})
}
参考资料:
记录每天解决的小问题,积累起来去解决大问题。