结构体的定义很简单:

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 mainimport ("fmt""math"
)type Vertex struct {X, Y float64
}func (v *Vertex) Scale(f float64) {v.X = v.X * fv.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 mainimport ("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系语言似乎是阉割版的,即只有在变量声明时会使用到,并不会涉及到指针操作,虽然觉得奇怪但是这样还是降低了语言难度哈。

转载于:https://www.cnblogs.com/puyangsky/p/5763067.html

【Go】语法基础之结构体相关推荐

  1. Go语言基础之结构体

    转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...

  2. 10.Go语言基础之结构体

    Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 ...

  3. c语言结构体语法定义,C | 结构体定义

    话说C语言是很多语言学习的基础,理解并掌握好了C语言的一些语法规则,对于以后学习或者说自学其他语言,可以节省不少的时间.下面我们就来了解C语言程序当中的结构体知识点. 结构体的定义形式如下: stru ...

  4. C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)

    示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...

  5. Go 存储基础 — 内存结构体怎么写入文件?

    作者 | 奇伢       责编 | 欧阳姝黎 概述 讲了那么多存储的通用知识,从 Linux 的文件系统,块层,再到磁盘,都做了一些深入的分享.今天分享一个 Go 编程的使用技巧:怎么把内存的结构体 ...

  6. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  7. C#基础之结构体枚举数组

    枚举 枚举的话,主要有两个比较吸引我的地方:一.规范常量的声明.使用和存储:二.不用记忆,方便枚举值的使用.     从规范性上来说,主要是避免同一类别的不同命名问题.诸如,在我们需要存储用户性别时, ...

  8. c语言结构体讲解,C语言基础之结构体讲解

    结构体 结构体是一种数据结构. int .float等是基本数据结构. 数组也是一种数据结构,但是数组存放的数据类型比较单一,结构体解决了数组里不能存放多种类型数据的这种缺陷. 1.结构体的声名 声名 ...

  9. java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )

    结构体 类似于Java中的Bean对象,可以将一些变量封装为一个结构体 声明结构体的关键字是struct,也可以通过typedef别名定义 举个栗子: struct Student { //不同的数据 ...

最新文章

  1. ctf 文件头crc错误_[CTF隐写]png中CRC检验错误的分析
  2. android键盘ui,android – 在自定义键盘中重新调整候选视图的UI
  3. UEFI+GPT与BIOS+MBR各自有什么优缺点?
  4. 安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...
  5. redis-py说明文件(转)
  6. 解读 2018之Go语言篇(上):为什么Go语言越来越热?
  7. 热聘:英特尔音频Firmware-Linux内核驱动
  8. 猎证计算机等级考试二级试题讲解,猎证计算机等级考试系统
  9. win7系统创建打印服务器,图文分享win7下添加打印服务器端口
  10. 在javascript中重新加载/刷新页面的不同方法
  11. 今天的Java笔试题
  12. MySQL备库复制延迟的原因及解决办法
  13. 外卖项目06---套餐管理业务开发(移动端的后台代码编辑开发)
  14. C语言--数据在内存中的存储
  15. LabVIEW入门第三天(软件及驱动包下载)
  16. 蔡丹红老师刁酒集团《基层管理人员综合能力提升培训班》企业内训开讲
  17. 筑波大学sgu项目计算机修士,柠檬SGU|筑波大学英文授课修士CSE计算机课程
  18. rust放置木箱转向_rust笔记五 - cyper的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 条形码入门指南(八):二维条形码
  20. 少有的追剧时光~《传闻中的陈芊芊》追剧后感

热门文章

  1. Flutter开发之ListView下拉刷新上拉加载更多(35)
  2. (0047)iOS开发之nil/Nil/NULL的区别
  3. (iOS-框架封装)iOS设计模式——MVC模式
  4. uniapp中动态添加及修改导航栏
  5. 字符串大小写转换通用函数
  6. Visual Studio 生成项目前自动关闭在运行的程序
  7. 如果我是博客园的产品经理【下】
  8. ASINetworkQueues(经典2)
  9. map vs hash_map
  10. 11gR2游标共享新特性带来的一些问题以及_cursor_features_enabled、_cursor_obsolete_threshold和106001 event...