• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【Go】语法基础之结构体

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

结构体的定义很简单:

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系语言似乎是阉割版的,即只有在变量声明时会使用到,并不会涉及到指针操作,虽然觉得奇怪但是这样还是降低了语言难度哈。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
聊聊GO-REDIS的一些高级用法发布时间:2022-07-10
下一篇:
U盘装系统/win to go制作笔记 - CowryGao发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap