go结构体方法
Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,而不仅仅是struct。
定义格式
func (var *Struct_Name) FuncName( var0, var1... ) return type {}
package main import (
"fmt"
) type test struct {
name string
age int
} func (v *test) getList() {
fmt.Println("getList")
} func main() {
var s = new(test) s.getList()
}
golang中结构体方法没有构造函数,可以自己定义并执行构造函数
package main import (
"fmt"
) type test struct {
name string
age int
} func (this *test) init(name string, age int) {
this.name = name
this.age = age
} func (this *test) getName() string {
return this.name
} func (this *test) getAge() int {
return this.age
} func main() {
var s = new(test) s.init("zhangsan", 20) fmt.Println(s.getName())
fmt.Println(s.getAge())
}
自行调用初始化方法来实现构造函数的作用

给一个类型取别名
package main
import "fmt"
type integer int
func (this integer) test() {
fmt.Println("print integer")
}
type test struct {
name string
age int
}
func main() {
var i = new(integer)
i.test()
}

结构体是用户单独定义的类型,不能和其他类型进行强制转换
package main
type integer int
func main() {
var i integer
i = 100
var n = 10
n = i
}

结构体是值类型的,改变的是内部的副本。
package main import (
"fmt"
) type integer int func (this integer) get() {
fmt.Println(this)
} func (this integer) set(num integer) {
this = num
} func main() {
var i integer
i = 100
i.set(1999) fmt.Print(i)
}

package main import (
"fmt"
) type integer int func (this integer) get() {
fmt.Println(this)
} func (this *integer) set(num integer) {
*this = num
} func main() {
var i integer
i = 100
(&i).set(1999) //= i.set(1999) fmt.Print(i)
}

方法的访问控制也是通过控制的
结构体继承
如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。
结构体方法的继承
package main import (
"fmt"
) type test struct {
Name int
Age int
} func (this test) getName() int {
return this.Name
} type test1 struct {
test
} func main() {
var t test1 t.Name = 123 var name = t.getName() fmt.Println(name)
}
如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。
如果一个struct嵌套了另一个有名结构体,那么这个模式就叫组合。
package main import (
"fmt"
) type test struct {
Name int
Age int
} func (this test) getName() int {
return this.Name
} type test1 struct {
t test
} func main() {
var t test1 t.t.Name = 123 var name = t.t.getName() fmt.Println(name)
}
go结构体方法的更多相关文章
- Go 结构体方法
#### Go 结构体方法本来今天有些事情忙的不准备更新内容了,后来提前完成了, 所以还是要更新了; 毕竟坚持本就是一件不容易的事情!加油,相信不管是大家还是我,都有一些事情想要做,那就坚持吧,剩下的 ...
- Go语言 - 结构体 | 方法
自定义类型和类型别名 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型 ...
- 【2016-08-18】转载:总结C++中几种结构体初始化的方法
作者:Ac_Von 博客地址:http://www.cnblogs.com/vongang/ 文章地址:http://www.cnblogs.com/vongang/archive/2011/07/3 ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Go part 5 结构体,方法与接收器
结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...
- 【转】golang 结构体和方法
原文:https://www.jianshu.com/p/b6ae3f85c683 ---------------------------------------------------------- ...
- Go 语言 结构体和方法
@ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...
- Go基础3:函数、结构体、方法、接口
目录 1. 函数 1.1 函数返回值 同一种类型返回值 带变量名的返回值 函数中的参数传递 函数变量 1.2 匿名函数--没有函数名字的函数 在定义时调用匿名函数 将匿名函数赋值给变量 匿名函数用作回 ...
- Swift入门篇-结构体
前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中 ...
随机推荐
- 【XSY2190】Alice and Bob VI 树形DP 树剖
题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...
- NEW —— Code
http://ai.baidu.com/ 百度AI开放平台
- windows 系统错误码总结
windows 错误码大全: 操作成功完成. 功能错误. 系统找不到指定的文件. 系统找不到指定的路径. 系统无法打开文件. 拒绝访问. 句柄无效. 存储控制块被损坏. 存储空间不足,无法处理此命令. ...
- MT【291】2元非齐次不等式
实数$x,y$满足$x^2+y^2=20,$求$xy+8x+y$的最大值___ 法一:$xy\le\dfrac{1}{4}x^2+y^2,8x\le x^2+16,y\le\dfrac{1}{4}y^ ...
- Hdoj 1785.You Are All Excellent 题解
Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出最优秀的18人组成6支队伍来 ...
- Hdoj 2717.Catch That Cow 题解
Problem Description Farmer John has been informed of the location of a fugitive cow and wants to cat ...
- 转----------数据库常见笔试面试题 - Hectorhua的专栏 - CSDN博客
数据库基础(面试常见题) 一.数据库基础 1. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 2. SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制( ...
- 51nod 1105(第K大数 二分套二分)
题目链接:http://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=620811 参考自:https://blog.csdn.net/f_ ...
- MongoDB存储引擎选择
MongoDB存储引擎选择 MongoDB存储引擎构架 插件式存储引擎, MongoDB 3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MyS ...
- QML学习笔记(四)-TabView-竖直方向
源码:https://github.com/sueRimn/QML-ExampleDemos 作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 想实现垂直竖直方向的Ta ...