目录:

  • struct声明和定义
  • struct的内存布局以及构造函数
  • 匿名字段和struct嵌套
  • struct与tag应用

struct声明和定义

1、Go中面向对象是通过struct来实现的, struct是用户自定义的类型。

type User struct {
Username string
Sex string
Age int
AvatarUrl string
}

  注意:type是⽤用来定义一种类型

2、struct初始化⽅方法1

var user User
user.Age = 18
user.Username = “user01”
user.Sex = “男”
user.AvatarUrl = “http://my.com/xxx.jpg"

  注意:使⽤用变量量名+ ‘.’ + 字段名访问结构体中的字段

3、 struct初始化方法2

var user User = User {
“Username” : “user01”,
“Age”: 18,
“Sex”: “男”,
“AvatarUrl”: “http://my.com/xxx.jpg”,
}

  注意:也可以部分初始化

更简单的写法:

user := User {
“Username” : “user01”,
“Age”: 18,
“Sex”: “男”,
“AvatarUrl”: “http://my.com/xxx.jpg”,
}

  

4、struct初始化的默认值

var user User
fmt.Printf(“%#v\n”, user)

  

5、结构体类型的指针

var user *User = &User{}
fmt.Printf(“%p %#v\n”, user)

  

var user *User = &User {
“Username” : “user01”,
“Age”: 18,
“Sex”: “男”,
“AvatarUrl”: “http://my.com/xxx.jpg”,
}

  

var user User = new(User)
user.Age = 18
user.Username = “user01”
user.Sex = “男”
user.AvatarUrl = “http://my.com/xxx.jpg"

  

struct的内存布局以及构造函数

1、结构体的内存布局: 占用一段连续的内存空间

2、结构体没有构造函数, 必要时需要自己实现

package main

import "fmt"

// struct定义
type User struct {
Username string
Sex int
Age int
AvatarUrl string
} func main() {
// 初始化
var user User
user.Age = 18
user.AvatarUrl = "http://baidu.com/image/xxx.jpg"
user.Sex = '男'
user.Username = "user01" fmt.Printf("user.username=%s age=%d sex=%s avatar=%s\n", user.Username, user.Age, user.Sex, user.AvatarUrl) // 初始化方法2
var user2 = User{
Username: "user02",
Age: 18,
Sex: '女',
AvatarUrl: "http://xxx.baidu.com/image/xxx.jpg",
} fmt.Printf("user2=%#v\n", user2) }

  

匿名字段和struct嵌套

1、匿名字段: 即没有名字的字段

type User struct {
Username string
Sex string
Age int
AvatarUrl string
} // 匿名字段
type User struct {
Username string
Sex string
Age int
AvatarUrl string
int
string
}

  注意:匿名字段默认采⽤用类型名作为字段名

2、结构体嵌套

type Address struct {
City string
Province string
} type User struct {
Username string
Sex string
Age int
AvatarUrl string
address Address
}

  

3、匿名结构体

type Address struct {
City string
Province string
} type User struct {
Username string
Sex string
Age int
AvatarUrl string
Address
}

  

4、匿名结构体与继承

type Animal struct {
City string
Province string
} type User struct {
Username string
Sex string
Age int
AvatarUrl string
Address
}

  

5、冲突解决

type Address struct {
City string
Province string
CreateTime string
} type Email struct {
Account string
CreateTime string
} type User struct {
Username string
Sex string
Age int
AvatarUrl string
Address
Email
CreateTime string
}

  

struct与tag应用

1、字段可见性,大写表示可公开访问,小写表示私有

type User struct {
Username string
Sex string
Age int
avatarUrl string
CreateTime string
}

  

2、tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来

type User struct {
Username string `json:”username”,db:”user_name”`
Sex string `json:”sex”`
Age int `json:”age”`
avatarUrl string
CreateTime string
}

  字段类型后⾯面,以反引号括起来的key-value结构的字符串串,多个tag以逗号隔开。

【原创】go语言学习(十二)struct介绍1的更多相关文章

  1. Python3.5 学习十二 数据库介绍

    MYSQL介绍: 主流三种数据库:Oracle.Mysql.Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u ...

  2. Dart语言学习(十二) Dart面向对象

    Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...

  3. C语言第十二讲,文件操作.

    C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...

  4. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  5. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  6. GO语言学习(二)Windows 平台下 LiteIDE 的安装和使用

    1. 安装 Go 语言并设置环境变量 参考GO语言学习(一) 2. MinGW 的下载和安装 Windows 下的 Go 调试还需要安装 MinGW. 2.1 下载安装工具的安装 最新版本下载安装工具 ...

  7. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  8. c语言学习之基础知识点介绍(十二):结构体的介绍

    一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...

  9. 【原创】go语言学习(二十)并发编程

    目录 并发和并行 Goroutine初探 Goroutine实战 Goroutine原理浅析 Channel介绍 Waitgroup介绍 Workerpool的实现 并发和并行 1.概念A. 并发:同 ...

  10. c语言学习之基础知识点介绍(二十):预处理指令

    一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...

随机推荐

  1. VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别

    原文转自 https://www.cnblogs.com/zhwl/archive/2012/11/29/2794509.html ATL是ActiveXTemplateLibrary的缩写,它是一套 ...

  2. 使用 rm -rf 删除了工程目录,然后从 pycharm 中找了回来

    一次惊险的 rm -rf 操作,以后删东西真的要小心,慢点操作 前两天周 4 周 5,写了两天的 python 代码没有提交,昨天晚上删日志目录,先跨目录查看了下日志目录的列表情况:ll ~/logs ...

  3. js展开循环

    当要对一个大数组进行循环时,通常会通过局部变量缓存数组长度来提高性能,例: for(var i=0,len=arr.len;i<len;i++){} 光是缓存数组长度或使用倒序遍历来减少判断外, ...

  4. PCI总线学习

    PCI总线概述: 因为不实际操作了,所以就写一些方法论上的东西,纪念一下. PCI总线有三个非常显著的优点: 1. 在计算机和外设传输数据时具有更好的性能. 2. 能够尽量独立于具体的平台. 3. 可 ...

  5. mysql主从部署

    一.安装环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 192.168.0.173 master 数据库:主 173  centos6.7 192.168.0.1 ...

  6. 【postman】postman使用教程

    postman基础功能 一.变量设置 编写的API往往需要在多个环境下执行,而Postman 提供了两种类型的变量:环境变量和全局变量,从而很好的解决了这个问题.同时变量还常用于关联接口间的参数传递. ...

  7. 数据库事务ACID特性(原子性、一致性、隔离性、持久性)

    ACID特性: 原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability) 原子性:一个事务必须被视为一个不可分割的最小工作单元,整个 ...

  8. cdh的web管理界面503

    503 Service Unavailable No server is available to handle this request.       重启 agent  以及 server   

  9. 极度舒适的 Python 入门教程,小猪佩奇也能学会~

    编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...

  10. Linux命令——pr

    参考:Linux命令——column 前言 接触这个命令的初衷是我想把一个很长的单列输出设置成多列输出,奈何column的分列输出机制太智障,直到我发现了pr 参数 pr -# 输出指定的列数. -t ...