结构体类型的字面量由关键字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. Hola!

    个人资料 我叫Xenny,当然我还有很多名字,Tony.LTY.唐梦寒.soar.tafhack等等,这些都是我的昵称:但是用的最多的还是Xenny. Xenny的来历很扯,Xen是因为从XD中取了个 ...

  2. JQuery对于动态生成的标签绑定事件失效

    JQuery对整个html文档进行dom操作后,我们要想动态绑定事件,有两种方法 1.在进行dom操作时,在标签中写上onclick="afun()" 2.利用document的操 ...

  3. 彻底关闭Windows10的更新

    Windows10的自动更新太恶心,关闭之后总能死灰复燃,更新偶尔占用大量的CPU内存,非常影响使用.而网上大多数都是关闭服务之类的方法,但是关闭之后没过多久又会重新自动启动,如何彻底摆脱wiondo ...

  4. jquery的api以及用法总结-选择器

    jQuery API及用法总结 选择器 基本选择器 * 通用选择器 .class 类选择器,一个元素可以有多个类(chrome使用原生js函数getElementByClassName()实现) 利用 ...

  5. Android Studio [ListView]

    ListViewActivity.java package com.xdw.a122.listview; import android.app.Activity; import android.os. ...

  6. 主动降噪技术(ANC)的前生今世--原理仿真

    一 原理: 主动降噪就是通过反相检测麦克风的声音或噪声来减弱周围环境的噪声让扬声器出来的声音听起来更清晰.主动降噪技术的目标就是通过一个自适应滤波器把不想要的噪声反相从而把噪声约束到固定的范围内.该系 ...

  7. 基于操作系统原理的Red Hat Linux的基本操作

    一.实验目的 1.了解Linux操作系统的启动与登录方法. 2.掌握Red Hat Linux图形用户界面下的基本操作. 3.学会Red Hat Linux基本设置. 二.实验内容 1. 登录 2. ...

  8. Python学习笔记整理总结【Django】【MVC/MTV/路由分配系统(URL)/视图函数 (views)/表单交互】

     一.Web框架概述  Web框架本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python # -*- coding:utf-8 ...

  9. Spring 梳理-处理Multipart 请求

    原理讲解 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form method="post"actio ...

  10. 使用.NET Core创建Windows服务(二) - 使用Topshelf方式

    原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tut ...