• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Golang学习笔记(六):struct

Golang学习笔记(六):struct

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了Golang学习笔记(六):struct等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

struct

struct,一组字段的集合,类似其他语言的class

放弃了大量包括继承在内的面向对象特性,只保留了组合(composition)这个最基础的特性

1.声明及初始化
type person struct {
    name string
    age  int
}

//初始化

func main() {
    var P person

    P.name = "tom"
    P.age = 25
    fmt.Println(P.name)

    P1 := person{"Tom1", 25}
    fmt.Println(P1.name)

    P2 := person{age: 24, name: "Tom"}
    fmt.Println(P2.name)
}
</div>

2.struct的匿名字段(继承)
type Human struct {
    name string
    age int
    weight int
}

tyep Student struct {
    Human //匿名字段,默认Student包含了Human的所有字段
    speciality string
}

mark := Student(Human{"mark", 25, 120}, "Computer Science")

mark.name
mark.age
</div>
能够实现字段继承,当字段名重复的时候,优先取外层的,可以通过指定struct名还决定取哪个
mark.Human = Human{"a", 55, 220}
mark.Human.age -= 1
</div>
struct不仅可以使用struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段,而且可以在相应字段上做函数操作

3.method
type Rect struct {
    x, y float64
    width, height float64
}

//method
</div>
Reciver 默认以值传递,而非引用传递,还可以是指针
指针作为Receiver会对实例对象的内容发生操作,而普通类型作为Receiver仅仅是以副本作为操作对象,而不对原实例对象发生操作
func (r ReciverType) funcName(params) (results) {

}
</div>
如果一个method的receiver是*T,调用时,可以传递一个T类型的实例变量V,而不必用&V去调用这个method
func (r *Rect) Area() float64 {
    return r.width * r.height
}

func (b *Box) SetColor(c Color) {
    b.color = c
}
</div>

4.method继承和重写

采用组合的方式实现继承
type Human struct {
    name string
}

type Student struct {
    Human
    School string
}

func (h *Human) SayHi() {
    fmt.Println(h.name)
}

//则Student和Employee的实例可以调用
func main() {
    h := Human{name: "human"}
    fmt.Print(h.name)
    h.SayHi()

    s := Student{Human{"student"}}
    s.SayHi()

}
</div>
还可以进行方法重写
funct (e *Student) SayHi() {
    e.Human.SayHi()
    fmt.Println(e.School)
}
</div>

</div>

您可能想查找下面的文章:

相关文章

  • go语言简单的处理http请求的函数实例
  • Go语言模拟while语句实现无限循环的方法
  • PHP与Go语言之间的通信详解
  • Go语言基础知识总结(语法、变量、数值类型、表达式、控制结构等)
  • go语言实现将重要数据写入图片中
  • Go语言MD5加密用法实例
  • GO语言文件的创建与打开实例分析
  • go语言按显示长度截取字符串的方法
  • go语言实现抓取高清图片
  • Go语言开发环境搭建与初探(Windows平台下)

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Go语言算法之寻找数组第二大元素的方法
    • Centos下搭建golang环境及vim高亮Go关键字设置的方法
    • Go语言中使用反射的方法
    • go语言检测文件是否存在的方法
    • 在Mac OS上安装Go语言编译器的方法
    • Go中map数据类型3点小知识
    • 从Node.js 转到 Go平台
    • Golang学习笔记(一):简介
    • Go语言对字符串进行SHA1哈希运算的方法
    • 使用Go语言简单模拟Python的生成器

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有