Go语言学习(十二)面向对象编程-结构体
2016-05-09 22:26
459 查看
1.结构体的初始化方式
例如自定义一个结构体package main import( "fmt" ) type Rect struct{ //type和struct为关键字 x,y float64 //结构体成员 widh,height float64 } func (r *Rect) Area() float64{ return r.width * r.height } func main(){ //初始结构体的几种方式: rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{0,0,100,200} rect4 := &Rect{widh:100,height:200} }
在Go语言中,未进行显式初始化的变量都会被初始化为该类型的”零值”,
例如bool类型的零值为false,int类型的零值为0,string 类型的零值为空字符串。
在Go语言中没有构造函数的概念,对象的创建通常交由一个全局的创建函数来完成,以
NewXXX来命名,表示“构造函数”:
func newRect(x,y,widh,height float64) *Rect{ return &Rect{x,y,widh,height} }
这一切非常自然,开发者也不需要分析在使用了 new 之后到底背后发生了多少事情。在Go
语言中,一切要发生的事情都直接可以看到。
2.嵌套结构体
package main import( "fmt" ) func main(){ t := space{plane{line{3}, 5}, 7} fmt.Println(t.x, t.y, t.z) //3 5 7 } type line struct { x int } type plane struct { line y int } type space struct { plane z int }
3.结构体的特点:
1)结构体可以储存不同的类型2)在内存中占据连续的内存空间
3)结构体每一个项所占用的内存大小不一定相同
4)结构体支持组合,即结构体可以保护结构体
5)通过操作结构体的项名t.x、t.y、t.z来获取字段值
6)判断两个结构体是否相同,需要看结构体的类型是否相同,
然后看项的顺序、项的名称、项的类型等等.
7)结构体的成员初始化是通过操作字段赋值来完成
相关文章推荐
- Bigtable 具体是怎样一个东西?和 MapReduce, Google File System 之间的关系是什么?
- Ubuntu 中给google配置HOSTS的方法
- Golang 模块扩展
- Go语言学习资料汇总
- Go语言学习(十一)面向对象编程-类型系统
- Django笔记(番外):虚拟环境
- LightOj 1259-Goldbach`s Conjecture(素数打表)
- POJ2762 Going from u to v or from v to u
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3
- django简明操作(自强学堂)
- mongo 3.0连接数持续上涨
- googles示例RecyclerView
- Google 深度学习笔记
- Google TensorFlow深度学习笔记
- 关于下载google play上的apk
- goLang 如何进行调试操作?
- django使用LDAP验证
- CUGOJ 1682
- 从Maven,Gradle到Go
- CUGOJ 1681 求解最长回文字符串