struct
1、定义一个structpackage main
import "fmt"
type Rectangle struct {
width float64
height float64
}
func main(){
var r Rectangle //声明一个结构体 r,width height的值为“零”值。在这里为0.0,0.0
r = Rectangle{width:20,height:10} //给长宽赋值,带名称时,顺序随意
r = Rectangle{20,10} //等价上部的赋值,不带变量名称时,值与声明的变量顺序一致。
fmt.Println("the Rectangle width:",r.width) // 访问 r.{属性}
}
//执行结果:
the Rectangle width: 20
2、给结构体定义方法package main
import "fmt"
type Rectangle struct {
width float64
height float64
}
func (r *Rectangle) area() float64 { //定义一个area的函数,返回值类型为float64,函数的接收者为前面括号的(变量名 类型名)
return r.width * r.height
}
func main(){
var r Rectangle
r = Rectangle{width:20,height:10}
r = Rectangle{20,10}
fmt.Println("the Rectangle width:",r.width)
fmt.Println("the area of Rectangle: ",r.area()) //直接调用area函数
}
//执行结果:
the Rectangle width: 20
the area of Rectangle: 200 //计算结果为200
3、结构体方法接收类型为指针,则能改变原结构体的属性值
我们先将类型设置为值类型看看package main
import "fmt"
type Rectangle struct {
width float64
height float64
}
func (r *Rectangle) area() float64 {
return r.width * r.height
}
func (r Rectangle) changeWidth(){ //把接收体的类型设置为值类型
r.width = 30
}
func main(){
var r Rectangle
r = Rectangle{width:20,height:10}
r = Rectangle{20,10}
fmt.Println("the Rectangle width:",r.width)
fmt.Println("the area of Rectangle: ",r.area())
r.changeWidth() //改变了width
fmt.Println("the Rectangle width:",r.width) //打印结果
}
//执行结果:
the Rectangle width: 20
the area of Rectangle: 200
the Rectangle width: 20 //结果显示并没有改变
我们将接收体设置为指针package main
import "fmt"
type Rectangle struct {
width float64
height float64
}
func (r *Rectangle) area() float64 {
return r.width * r.height
}
func (r *Rectangle) changeWidth(){ // 指针类型
r.width = 30
}
func main(){
var r Rectangle
r = Rectangle{width:20,height:10}
r = Rectangle{20,10}
fmt.Println("the Rectangle width:",r.width)
fmt.Println("the area of Rectangle: ",r.area())
r.changeWidth()
fmt.Println("the Rectangle width:",r.width)
}
//执行结果:
the Rectangle width: 20
the area of Rectangle: 200
the Rectangle width: 30 //结果显示已经改变了width的值