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开发中 ...
随机推荐
- verilog parameter 位宽问题
前言 一直以为parameter 的位宽是无限的,其实不然. 流程: 仿真一下就知道啦: 用处: 精准控制位宽理论上会占用更少的内存,其他好像并没有什么卵用,注意不要越界,我这里系统默认32bit位宽 ...
- 【CF981D】Bookshelves(贪心,动态规划)
[CF981D]Bookshelves(贪心,动态规划) 题面 洛谷 Codeforces 给定一个长度为\(n\)的数列,把他们划分成\(k\)段,使得每段的和的结构按位与起来最大. 题解 从高位往 ...
- 【CF671D】Roads in Yusland(贪心,左偏树)
[CF671D]Roads in Yusland(贪心,左偏树) 题面 洛谷 CF 题解 无解的情况随便怎么搞搞提前处理掉. 通过严密(大雾)地推导后,发现问题可以转化成这个问题: 给定一棵树,每条边 ...
- 【BZOJ5288】[HNOI2018]游戏(拓扑排序)
[BZOJ5288][HNOI2018]游戏(拓扑排序) 题面 BZOJ 洛谷 题解 去年省选的时候这题给我乱搞整过去整过去了,也是虐心了.... 所以当然是来讲正儿八经的正确做法啦. 很明显,我们需 ...
- django从零开始-视图
1.处理的登录请求 views文章中添加登录函数login_action def login_action(request): if request.method == 'POST': usernam ...
- js多回调函数
多回调问题 前端编程时,大多通过接口交换数据,接口调用都是异步的,处理数据都是在回调函数里. 假如需要为一个用户建立档案,需要准备以下数据,然后调用建档接口 name // 用户名字 使用接口 ...
- 浅析 @PathVariable 和 @RequestParam(转发,非原创)
首先 上两个地址:地址①http://localhost:8989/SSSP/emps?pageNo=2地址②http://localhost:8989/SSSP/emp/7如果想获取地址①中的 pa ...
- eclipse 设置
修改工作空间默认编码:Window --> Preferences --> General --> Workspace --> Text file encoding --> ...
- luoguP4707 重返现世
收集邮票加强版,每个邮票不是等概率获得的了. 而且是获得K个,如果把一个全集S集合找出其获得时间集合(显然获得时间两两不同)的话,那么就是第n-k+1大的期望! %%%Sooke min-max容斥扩 ...
- bzoj4198 荷马史诗
关于Huffman树: 大概就是那样子吧. 是这样的:对于最多只能有k个叉的树,我们想要使得∑val(i) * deep(i)最大 那么我们补0后建立小根堆即可. 最典型例题:合并果子. 然后是这个: ...