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)是由一系列具有相同类型或不同类 ...
随机推荐
- 剑指offer 59-II 队列的最大值
题目描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1). 若队列为空,pop_ ...
- Django ContentType(ORM操作)
ContentType-设计课程表 # 数据: """ 免费课:Python入门 学位课:Python全栈 价格策略: Linux入门 7 0 Python入门 7 0 ...
- 确成硅化+恒力+苏大文正节点2 oracle ora-4030 错误pga version:11204
Errors in file /u01/app/oracle/oracle/diag/rdbms/orcl/orcl/trace/orcl_j000_61543.trc (incident=18009 ...
- 深入理解SVM,详解SMO算法
今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...
- python-生成器(generation)
阐述思路是:迭代(iteration).迭代器(iterator).生成器(generator). 迭代 迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为 ...
- MATLAB中均值、方差、均方差的计算方法
MATLAB中均值.方差.均方差的计算方法 1. 均值 数学定义: Matlab函数:mean >>X=[1,2,3] >>mean(X)=2 如果X是一个矩阵,则其均 ...
- 关于消息中间件ActiveMQ的企业级应用
几个月前看到项目中配置了activeMq,于是想通透的掌握activeMq,便去网上学习搜寻资料,找到这一篇博客挺不错的,解释的比较清楚,包括原理使用和配置,特此把它分享给大家. 众所周知,消息中间件 ...
- GameObject的==的一个坑和一点GameObject的内部构造
一切都是因为==,才有了这篇博客 目录 测试 结果和分析 总结 测试 先放一段unity的一个普通的脚本 using UnityEngine; public class UnityEngineObje ...
- Centos-链接-ln
ln 用来在文件或者目录之间创建链接,分为软链接和硬链接,硬链接依据文件的inode来进行链接,linux系统中允许存在多个inode号,文件真正的删除,是指向这个文件block的inode为0则该数 ...
- vant实现下拉多选组件
1.最近需要做一个移动端多选的功能,发现vant上没有多选的下拉组件,于是决定写一个,样式如下 调用部分传入值 propsselect-data-opts 传入list数据, disabled 下拉是 ...