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结构体方法的更多相关文章

  1. Go 结构体方法

    #### Go 结构体方法本来今天有些事情忙的不准备更新内容了,后来提前完成了, 所以还是要更新了; 毕竟坚持本就是一件不容易的事情!加油,相信不管是大家还是我,都有一些事情想要做,那就坚持吧,剩下的 ...

  2. Go语言 - 结构体 | 方法

    自定义类型和类型别名 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型 ...

  3. 【2016-08-18】转载:总结C++中几种结构体初始化的方法

    作者:Ac_Von 博客地址:http://www.cnblogs.com/vongang/ 文章地址:http://www.cnblogs.com/vongang/archive/2011/07/3 ...

  4. 六、golang中的结构体和方法、接口

    结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...

  5. Go part 5 结构体,方法与接收器

    结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...

  6. 【转】golang 结构体和方法

    原文:https://www.jianshu.com/p/b6ae3f85c683 ---------------------------------------------------------- ...

  7. Go 语言 结构体和方法

    @ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...

  8. Go基础3:函数、结构体、方法、接口

    目录 1. 函数 1.1 函数返回值 同一种类型返回值 带变量名的返回值 函数中的参数传递 函数变量 1.2 匿名函数--没有函数名字的函数 在定义时调用匿名函数 将匿名函数赋值给变量 匿名函数用作回 ...

  9. Swift入门篇-结构体

    前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中 ...

随机推荐

  1. [SDOI2013] 直径

    传送门:>HERE< 题意:给出一颗树,求出被所有的直径都经过的边的数量 解题思路: 先求出任意一条直径并记录节点. 然后依次枚举直径上的每一个节点,判断从当前节点延伸出去的非直径的一条路 ...

  2. thinkPHP框架5.0 类图下载

    thinkPHP5.0 类图下载

  3. 百度APP爬虫

    1.抓包 访问一个频道,Charles抓包,找到真实连接,一般返回json数据和网页中数据对应为真实连接 请求方式为post,所以要添加请求头和表单数据,由于在charles环境下,所以要添加char ...

  4. [luogu2051][bzoj1801][AHOI2009]chess中国象棋【动态规划】

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...

  5. nginx proxy文件编写总结

    upstream.conf upstream api { server 192.168.10.10:8080; server 192.168.10.20:8080;} server{ listen 4 ...

  6. Paint the Wall ZOJ - 2747

    点数很多,坐标值很大,然后离散化一下用一个点表示一小块的面积对应的颜色,然后更新的时候一块一块更新,查询的时候一块一块查询 #include<map> #include<set> ...

  7. day27

    27.01 反射(类的加载概述和加载时机) 1.类的加载 当程序要使用某个类时,如果该类还未加载到内存中,系统会通知加载,连接,初始化三步来实现对这个类初始化 a.加载 是指将.class文件读入内存 ...

  8. Yii2 如何输出 sql 语句?

    可以用 $model->find()->createCommand()->getRawSql(); 不能带 all(). find() 它的 返回值类型是 yii\db\Active ...

  9. 牛客小白月赛12C (线性筛积性函数)

    链接:https://ac.nowcoder.com/acm/contest/392/C来源:牛客网 题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ...

  10. 码农眼中的数学之~矩阵专栏(附Numpy讲解)

      2.矩阵专栏¶ 吐槽一下:矩阵本身不难,但是矩阵的写作太蛋疼了 (⊙﹏⊙)汗 还好有Numpy,不然真的崩溃了... LaTex有没有一个集成了很多常用公式以及推导或者含题库的在线编辑器? 代码裤 ...