Golang学习笔记(六):struct_Golang

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)
}

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

能够实现字段继承,当字段名重复的时候,优先取外层的,可以通过指定struct名还决定取哪个

复制代码 代码如下:

mark.Human = Human{"a", 55, 220}
mark.Human.age -= 1

struct不仅可以使用struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段,而且可以在相应字段上做函数操作

3.method

复制代码 代码如下:

type Rect struct {
    x, y float64
    width, height float64
}

//method

Reciver 默认以值传递,而非引用传递,还可以是指针
指针作为Receiver会对实例对象的内容发生操作,而普通类型作为Receiver仅仅是以副本作为操作对象,而不对原实例对象发生操作

复制代码 代码如下:

func (r ReciverType) funcName(params) (results) {

}

如果一个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
}

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()

}

还可以进行方法重写

复制代码 代码如下:

funct (e *Student) SayHi() {
    e.Human.SayHi()
    fmt.Println(e.School)
}

时间: 2024-11-30 11:48:43

Golang学习笔记(六):struct_Golang的相关文章

kvm虚拟化学习笔记(六)之kvm虚拟机控制台登录配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1290996 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linux kvm虚拟机安装 h

JSP学习笔记(六)-----在多个JSP页面之间传递参数

js|笔记|页面 1. 怎么在多个JSP页面之间进行参数传递?需要使用JSP的内置作用域对象session.利用它的两个方法setAttribute(),getAttribute()2. 下面的这个实例实现了把第一个JSP页面的参数传递给第三个页面的功能3. 代码如下:1.jsp<html><form method=get action=2.jsp>what's your name<input type=text name=username><input type

【Alljoyn】 Alljoyn学习笔记六 Alljoyn基本概念

一.历史: Alljoyn是高通2011年推出的近距离P2P通讯技术,它为分布式应用程序在不同设备中提供了运行环境,特别是移动性.安全性和动态配置,支持Microsoft Windows.Linux.ios和Android等主流的操作系统平台,可以说AllJoyn是专门处理异构分布式系统中的难题而产生的,同时Alljoyn还是一项开源项目(项目地址http://www.alljoyn.org),按道理说应该很火才对, 因此高通在2013年12月份将该项目贡献了处理,并拉了一帮的大佬小弟(Linu

Nginx学习笔记六Nginx的模块开发

1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均衡相关配置)这部分指令用于设置反向代理及后端服务 器的负载均衡.location(目录匹配配置)这部分指令用于匹配网页位置(例如,根目录"/","/images",等 等). location部分会继承server部分的指令,而server部分会继承main部分的指令.

VC++/MFC学习笔记(六)

  总在很多地方看到COM的相关的东西,但是一直以来对COM的理解只是局限于知道它的全称:Component Object Model.为此,专门读了一下<COM技术内幕>的第一章,力求先对COM有一个初步的了解,随着学习的深入,肯定会进一步对COM进行研究.   COM是什么? COM是一个说明如何建立可动态互变组件的规范.它提供了为保证能够互操作,客户和组件应遵循的一些标准. COM规范就是一套为组件架构设置标准的文档.遵循COM规范编写的组件能够满足对组件构架的所有需求. COM组件是以

JVM深入学习笔记六-JVM类加载

类加载过程 主要分为了 加载->链接(验证->准备->解析)->初始化->使用->卸载这几个阶段. 加载 三件事 1. 通过类的权限定名称来获取定义此类的二进制字节流(可以是文件,网络,数据库,动态等等等等) 2. 把类的结构放在方法区中 3. 创建Class对象作为访问入口 验证 主要包括了字节码验证,元数据验证(这部分在编译期间基本上避免了),类文件格式验证. 准备 包括了内存分配和类变量(static)初始值的设定,以及常量池的写入. 解析 主要是解析符号引用和直

cmake 学习笔记(六)

希望这是现阶段阻碍阅读shiboken和PySide源码的涉及cmake的最后一个障碍 ^ _^ 学习 cmake 的单元测试部分 ctest. 简单使用 最简单的使用ctest的方法,就是在 CMakeLists.txt 添加命令: enable_testing() 该命令需要在源码的根目录文件内. 从这一刻起,就可以在工程中添加add_test命令了 add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]] [WORKING_DIR

设计模式学习笔记(六)—Decorator装饰模式

<设计模式>一书对Decorator是这样描述的: 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式比生成子类更为灵活. 也就是说:动态地给对象添加一些额外的功能.它的工作原理是:创建一个始于Decorator对象(负责新功能的对象)终止于原对象的一个对象的"链".例如,我们要为超市的收银台设计一个打印票据的程序,有的需要打印票据的头信息,有的需要打印票据的页脚信息,有的只需要打印票据的内容.如果针对每一种情况都修改一次程序,势必会很麻烦.这时我们

Unmi的Struts2学习笔记(六)

米洗毕,水适量,盖合上,心摇摆,总觉水多了一分或是少了几点,于是重又 加上或倒出少许,其实这丁点份量完全无碍煮出香喷喷的饭来.及至将熟之际, 亦有犹豫,心中默数至少10,如再有不定辄至20,掐火,20对最终质量来说或有 所损. 1. Struts2 的 Action 中可直接用属性来封装请求参数和处理结果,此谓之 属性驱动.也可以像 Struts1 那样使用专门的 ActionForm 来处理请求参数和结 果,只不过 Struts2 用的是一个更单纯的 POJO,这就做模型驱动:此时的 Acti