go 结构体与方法
go 结构体与方法
go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性
结构体的定义
1、结构体的定义以及简单实用
package main
import (
"fmt"
)
func main() {
type Student struct { //定义结构体
name string
age int
}
s1 := new(Student) // 定义指向结构体的指针
s1.name = "xiaomu"
s1.age = 10
fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age)
}
结构体定义的三种方式,例如上面的 Student 类型,有如下方式定义
①var s1 Student 在内存中直接定义一个结构体变量
②s1 := new(Student) 在内存中定义一个指向结构体的指针
③s1 := &Student{} 同上
通过以下方式获取存储的值
①s1.name
②s1.name或者(*s1).name
③同上
2、struct 中的“构造函数”,称之为工厂模式,见代码
package main
import (
"fmt"
)
type Student struct { //声明结构体
Name string
Age int
}
func NewStudent(name string, age int) *Student { // 返回值指向 Student 结构体的指针
return &Student{
Name: name,
Age: age,
}
}
func main() {
s1 := NewStudent("xiaomu", 123) // 声明并且赋值指向Student结构体的指针
fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age)
}
3、特意声明注意事项!!!
结构体是值类型,需要使用 new 分配内存
4、匿名字段,直接看下面代码
package main
import (
"fmt"
)
func main() {
type Class struct {
ClassName string
}
type Student struct { //定义结构体
name string
age int
Class // 定义匿名字段,继承了该结构体的所有字段
}
s1 := new(Student) // 定义指向结构体的指针
s1.ClassName = "xiaomu"
fmt.Printf("ClassName:%s\n", s1.ClassName)
}
struct 的方法
1、在 struct 中定义方法并且使用
package main
import (
"fmt"
)
type Student struct { //定义结构体
name string
age int
}
func (stu *Student) OutName() { // 定义Student方法
fmt.Println(stu.name)
}
func main() {
s1 := new(Student) // 定义指向结构体的指针
s1.name = "xaiomu"
s1.OutName()
}
2、结构体继承结构体,其中被继承结构体的方法全部为继承结构体吸收(吸星大法)
package main
import (
"fmt"
)
type ClassName struct {
className string
}
func (cla *ClassName) OutClassName() {
fmt.Println(cla.className)
}
type Student struct { //定义结构体
name string
age int
ClassName // 继承ClassName结构体的所有
}
func (stu *Student) OutName() { // 定义Student方法
fmt.Println(stu.name)
}
func main() {
s1 := new(Student) // 定义指向结构体的指针
s1.className = "xiaomu"
s1.OutClassName()
}
go 结构体与方法的更多相关文章
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Go part 5 结构体,方法与接收器
结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...
- go结构体的方法和普通函数
package main import ( "fmt" "math" ) type vertex struct { X, Y float64 } //值接收者是 ...
- go结构体与方法
go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ...
- Go 语言 结构体和方法
@ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...
- Go基础之--结构体和方法
结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...
- go的基结构体如何使用派生结构体的方法
将派生类的方法声明为接口嵌入到基结构体中,派生结构体声明该接口为自身.
- go_结构体和方法
面向对象:go语言仅支持封装不支持继承和多态 所以go语言没有class,只有struct(结构体) 无论地址还是结构本身,一律用 . 来访问成员 go语言编译器可以自动区分是值传递还是指针传递,值传 ...
- Go语言 6 结构体、方法和接口
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...
随机推荐
- 还不懂Redis?看完这个故事就明白了!
我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上. 说起我的诞生,跟关系数据库MySQL还挺有渊源的. 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发 ...
- 内存管理初始化源码4:add_active_range
我们在阅读源码时,函数功能可以分为两类:1. bootmem.c 2. page_alloc.c. 1. bootmem.c是关于bootmem allocator的,上篇文章已经简述过. 2. pa ...
- openstack 介绍
penstack介绍(1) 一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 ...
- Hashmap,Set,Map,List,ArrayList的区别
表格: 类型 默认容量 加载因子[1] 扩容增量 底层实现 是否安全及同步方式 Vector 10 1 2倍 Object数组 安全,synchronized ArrayList 10 1 1.5倍( ...
- 1.7Hadoop-HDFS命令
- 有向图的基本算法-Java实现
有向图 有向图同无向图的区别为每条边带有方向,表明从一个顶点至另一个顶点可达.有向图的算法多依赖深度搜索算法. 本文主要介绍有向图的基本算法,涉及图的表示.可达性.检测环.图的遍历.拓扑排序以及强连通 ...
- Guava Cache详解
适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...
- kubeadm单集群部署k8s1.15.1&flannel网络
说明 本次实验在Windows下的VMware进行 系统配置及初始化配置在所有的主机执行 容器镜像全部替换为国内可拉取的 pod网络采用flannel 实验环境 主机名 IP地址 角色 OS CPU/ ...
- pycharm 配置 github
今天突然想把自己的代码上传到github上去,然后就研究了下pycharm的配置. 首先呢,你得有个github的账号,然后建立一个项目. 然后打开pycharm,选择file->Setting ...
- matplotlib.pyplot.imshow如何显示灰度图
转载:https://www.zhihu.com/question/24058898 作者:采石工链接:https://www.zhihu.com/question/24058898/answer/1 ...