go 结构体
go 结构体
Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义结构体定义的一般方式如下: type Identifier struct {
field1 type1
field2 type2
...
}
赋值
我们可以使用 structname.fieldname = value 同样的,也可以使用 structname.fieldname 在 Go 语言中这叫 selector。无论变量是一个 type myStruct struct { i int }
var v myStruct // v 是结构体类型变量
var p *myStruct // p 是指向一个结构体类型变量的指针
v.i
p.i
下面来看一个例子 // rectangle.go
package rect
type Rectangle struct {
length int
width int
}
func (r *Rectangle) Set(x,y int) {
r.length = x
r.width = y
}
func (r *Rectangle) Area() (res int) {
res = r.length * r.width
return
}
func (r *Rectangle) Perimeter() (res int) {
res = (r.length + r.width) * 2
return
}
// main.go
package main
import (
"rect"
"fmt"
)
func main() {
rectangle := new(rect.Rectangle)
rectangle.Set(1, 2)
fmt.Println("rectangle is",rectangle)
fmt.Println(rectangle.Area())
fmt.Println(rectangle.Perimeter())
}
运行结果 rectangle is &{1 2}
2
6
例如: type MyStruct struct {
x int
y int
}
my := new(MyStruct)
my.x = 1
my.y = 2
等价于
my2 := &Mystrcut{1, 2}
工厂方法你现在突然想,不能让别人看到我的结构体,我应该把它设为私有的,但是还想让别人使用我的结构体,该怎么办? 为了方便,通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头,它返回一个指向结构体实例的指针。形式如下: // mystruct.go
package my
type mystruct struct {
...
}
func NewMystruct() *mystruct {
m : = new(mystruct) // 初始化 m
return m
}
在其他包里使用工厂方法: // main.go
package main
import "my"
...
wrong : = new(my.mystruct) // 编译失败,mystruct 是私有的
right : = my.NewMystruct() // 实例化 mystruct 的唯一方式
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |