在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
结构体的定义很简单:type Vertex struct {
X, Y float64
}
可以理解为多个变量的集合。 结构体的使用:1、直接使用: v := Vertex{1, 2} 或 var v = Vertex{1, 2} 2、通过new关键字: v := new(Vertex)
3、通过指针访问: v := &Vertex{1, 2}
为结构体添加方法:package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Scale(f float64) { v.X = v.X * f v.Y = v.Y * f } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := &Vertex{3, 4} v.Scale(5) fmt.Println(v, v.Abs()) } 给结构体添加方法,就是在定义方法的时候在func和方法名之间加一个括号,加入该结构体的指针引用(也可以是值引用)。 这里值得注意的是指针引用和值引用的区别: 指针引用可以对结构体内部数据进行修改,而值引用不可以,如下面的例子: package main import ( "fmt" ) type Vertex struct { X, Y int } //值引用 func (v Vertex) show() { v.X = 1 } //指针引用 func (v *Vertex) show1() { v.X = 1 } func main() { v := &Vertex{3, 4} v.show() fmt.Println(v.X) //输出:3 v.show1() fmt.Println(v.X) //输出:1 } 可以看出若在结构体的方法定义时没有使用指针引用,是无法改变结构体的成员变量值的。
总结:golang是非面向对象语言,对于写java比较多的我还是有点难以接受的,可能C系同学更易接受吧。若非要比较,也可以说go语言中的结构体类似java中的类,但是很明显缺少继承多态等等OO的特性。 另外,go中的指针相比较于C系语言似乎是阉割版的,即只有在变量声明时会使用到,并不会涉及到指针操作,虽然觉得奇怪但是这样还是降低了语言难度哈。
|
请发表评论