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开发中 ...
随机推荐
- 【XSY2741】网格 分治 LCT 并查集
题目描述 有一个\(n\times m\)的网格,线框的交点可以扭动,边不可伸缩.网格中有一些格子里面放了'x'形的支架,这些格子不会变形,但可以整体转动.如果所有格子都不能变形,那么称这个网格稳固. ...
- 【 HDU2966 】In case of failure(KD-Tree)
BUPT2017 wintertraining(15) #5E HDU - 2966 题意 给平面直角坐标系下的n个点的坐标,求离每个点和它最近点的距离的平方.\(2 \le n \le 10^5\) ...
- Markdown文本的学习
大标题 小标题 小小标题 小小小标题 萌啊萌啊萌 斜体 萌啊萌啊萌 粗体 萌啊萌啊萌 又粗又斜 萌啊萌啊萌 我是分割线 p.s. 标准Markdown换行要打两个空格 短代码 #include < ...
- [luogu3391][bzoj3223]文艺平衡树【splay】
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析 ...
- IP地址等价类测试用例
下面是一个比较完善的设计方案,这个方案中,首先把IP地址分成有效可用的IP地址和有效但不可用的IP地址两个等价类:其中有效可用的IP地址中包括IP地址的A,B,C三类地址,有效但不可用的IP地址包括D ...
- 通过pycharm将代码push到远程仓库
现在使用pycharm作为python编辑器的人还是不少,而且,也可以通过pycharm将代码push到远程仓库. 步骤见下面截图: 填上远程仓库地址及克隆到本地的目录 输入远程仓库的账号和密码 修改 ...
- 假如你不小心干掉了系统,你该怎么办?(一次手贱的记录 ~ Ubuntu and Python3.6)
前言 多年未犯低级错误,今天犯了个不大不小的错误,记录下生活点滴吧 今天早上脑海里想了下,如果电脑挂了我要备份哪些东西?然后中午休息的时候就列了一下,没想到晚上就悲剧了... 这个是中午写的: ## ...
- Python中生成器generator和迭代器Iterator的使用方法
一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...
- 以太坊、Hyperledger Fabric和Corda,哪个更好?
原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ...
- SRM 605 div 2 T3
#include <bits/stdc++.h> #define Mo 1000000007 #define MAXN 50 #define MAXK 10 using namespace ...