您的位置:首页 > 编程语言 > Go语言

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)结构体的成员初始化是通过操作字段赋值来完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: