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

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

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

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

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

  3. go结构体的方法和普通函数

    package main import ( "fmt" "math" ) type vertex struct { X, Y float64 } //值接收者是 ...

  4. go结构体与方法

    go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ...

  5. Go 语言 结构体和方法

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

  6. Go基础之--结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

  7. go的基结构体如何使用派生结构体的方法

    将派生类的方法声明为接口嵌入到基结构体中,派生结构体声明该接口为自身.

  8. go_结构体和方法

    面向对象:go语言仅支持封装不支持继承和多态 所以go语言没有class,只有struct(结构体) 无论地址还是结构本身,一律用 . 来访问成员 go语言编译器可以自动区分是值传递还是指针传递,值传 ...

  9. Go语言 6 结构体、方法和接口

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...

随机推荐

  1. oracle之通过group by产生统计报告

    通过group by产生统计报告 Oracle数据库中的ROLLUP配合group by命令使用,可以提供信息汇总功能(与"小计"相似)CUBE,也是GROUP BY子句的一种扩展 ...

  2. sql.表值类型

    表值类型是在sql server 2008中新加入的功能,我个人觉得确实很有用,之前从没用过,自从来到现在的公司后学到很多东西,所以和大家分享一下. ------建表值类型语法------------ ...

  3. 解决IDEA打包出现中文乱码的问题

    这主要是maven编译时编码问题导致的. 解决办法: 1.在IDEA的File里面打开Settings. 2.找到Runner,在VM Options输入-DarchetypeCatalog=inte ...

  4. 月薪20k的java面试题他来了

    1.场景描述 最近有朋友私信,说网上的面试资料有点散,还有些过时的,问老王能否帮忙整理下,老王晚上刚好有空,就给梳理了下,分享给大家. 2.解决方案 2.1 说明 (1)面试的题目多数是从网上找的,老 ...

  5. 几个概念讲解Xaas

    saas:software as a service  SaaS平台是运营saas软件的平台.SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件.硬件运作平台,并负责所有前期的实施.后期的维 ...

  6. 第一篇 Hell wcf

    老老实实学WCF  第一篇 Hello WCF WCF(Windows Communication Foundation)是微软公司推出的面向服务技术的集大成者,涵盖继承了其之前发布的所有的分布式应用 ...

  7. Guava Cache详解

    适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...

  8. ubuntu 开启samba

    sudo apt-get update sudo apt-get install samba samba-common sudo mkdir /home/vagrant/share sudo chmo ...

  9. Java Comparable 和 Comparator 接口详解

    本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...

  10. GIT学习与GIEE(码云体验)

    GIT 是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...