结构体类型的字面量由关键字type、类型名称、关键字struct,以及由花括号包裹的若干字段声明组成。
type Person struct {
Name string
Gender string
Age uint8
}
Person{Name: "Robert", Gender: "Male", Age: }
键值对的顺序与其类型中的字段声明完全相同的话,我们还可以统一省略掉所有字段的名称
Person{"Robert", "Male", }
结构体类型的值字面量时可以只对它的部分字段赋值,甚至不对它的任何字段赋值。
这时,未被显式赋值的字段的值则为其类型的零值。
上述情况下,字段的名称是不能被省略的。
匿名结构体
编写一个结构体值的字面量时不需要先拟好其类型。这样的结构体字面量被称为匿名结构体。
与匿名函数类似,我们在编写匿名结构体的时候需要先写明其类型特征(包含若干字段声明),再写出它的值初始化部分。
p := struct {
Name string
Gender string
Age uint8
}{"Robert", "Male", }
匿名结构体最大的用处就是在内部临时创建一个结构以封装数据,而不必正式为其声明相关规则。
而在涉及到对外的场景中,我强烈建议使用正式的结构体类型。
结构体类型可以拥有若干方法(注意,匿名结构体是不可能拥有方法的)
所谓方法,其实就是一种特殊的函数。它可以依附于某个自定义类型。
方法的特殊在于它的声明包含了一个接收者声明。
这里的接收者指代它所依附的那个类型。名为Grow的方法的声明:
func (person *Person) Grow() {
person.Age++
}
p := Person{"Robert", "Male", }
p.Grow()
最后,结构体类型属于值类型。
它的零值并不是nil,而是其中字段的值均为相应类型的零值的值。
结构体类型Person的零值若用字面量来表示的话则为Person{}。
package main

import (
"fmt"
) type Persion struct {
name string
age int
sex byte
} type Student struct {
Persion //结构体匿名字段,只有类型,没有名字,匿名字段,继承了Persion的成员
int //基础类匿名字段
id int
addr string
name string
} func main() {
//直接定义一个对象
var xx Student
xx.name = "xiao x" //结构体中的其他结构体同名字成员变量, 需显示的调用赋值
xx.Persion.name = "xiao xie"
xx.age =
fmt.Println(xx) //顺序初始化,匿名变量的初始化
var xiaoming Student = Student{Persion{"xiaoming", , 'm'}, , , "201 Room", "xx"}
fmt.Println(xiaoming) //可直接使用匿名对象的类型
fmt.Println(xiaoming.int) //自动推导
xiaofang := Student{Persion{"xiaofang", , 'f'}, , , "401 Room", "xx"}
fmt.Println(xiaofang) //指定成员初始化
s3 := Student{Persion: Persion{"xiaofang", , 'm'}}
fmt.Println(s3)
s4 := Student{addr: "203 Room"}
fmt.Println(s4) }
type Student struct {
*Persion //指针类型匿名字段
} func main() {
//方式1
var xiaoming Student = Student{&Persion{"xiaoming2", , 'm'}}
fmt.Println(xiaoming.name) //方式2
var xiaofang Student
xiaofang.Persion = new(Persion)
xiaofang.Persion.name = "xiaofang"
fmt.Println(xiaofang.Persion.name)
}
//带有接收者的方法叫成员函数
func (p Persion) PrintName() {
fmt.Println(p)
} //指针接收者
func (p *Persion) setName(str string) {
p.name = str
} func main() {
var p Persion = Persion{"xiaoming", , 'M'}
p.PrintName()
(&p).setName("xiaof")
p.PrintName()
}

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 结构体与方法   go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性 结构体的定义 1.结构体的定义以及简单实用 package main imp ...

  5. go结构体与方法

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

  6. Go 语言 结构体和方法

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

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

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

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

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

  9. go_结构体和方法

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

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

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

随机推荐

  1. (一)spring 高级装配-@Profile

    1.环境与profile 示例:数据库配置 a:通过@Bean注解,通过EmbeddedDatabaseBuilder创建数据源 @Bean(destroyMethod="shutdown& ...

  2. Python3.7.4入门-0/1To Begin/数据类型与结构

    0 To Begin //:向下取整除法 **:乘方 在交互模式下,上一次打印出来的表达式被赋值给变量 _ 如果不希望前置了 \ 的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加 r 即 ...

  3. RabbitMQ的六种工作模式总结

    最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...

  4. 前台提交数据到node服务器(post方式)

    post方式同样有两种办法,一种是表单提交,一种是ajax提交. 在此之前需要安装一个中间件:body-parser,安装好后在app.js头部引入: bodyParser = require('bo ...

  5. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  6. 心动吗?正大光明的免费使用IntelliJ IDEA商业版

    IntelliJ IDEA是广受Java开发者喜爱的工具,其商业版的价格十分昂贵,如下图: 现在有机会免费获取IntelliJ IDEA的正版License,您是否心动呢?我把自己成功申请Licens ...

  7. 使用 BeanDefinition 描述 Spring Bean

    什么是BeanDefinition 在Java中,一切皆对象.在JDK中使用java.lang.Class来描述类这个对象. 在Spring中,存在bean这样一个概念,那Spring又是怎么抽象be ...

  8. Python入门系列【附】进阶教程

    如题,本篇将讲解Python提升之路:Python作为语法简单易学的语言,入门容易精通却很难,这是共识,那么为什么会有这样的共识?精通Python的难度在哪里? Python拥有简单.形象.直观的语法 ...

  9. 【Java】获取当前操作系统桌面路径

    //当前用户桌面 File desktopDir = FileSystemView.getFileSystemView() .getHomeDirectory(); String desktopPat ...

  10. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...