Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示:

  type person struct {

  name string

  age int

  }

  看到了吗?声明一个struct如此简单,上面的类型包含有两个字段

  1、一个string类型的字段name,用来保存用户名称这个属性

  2、一个int类型的字段age,用来保存用户年龄这个属性

  如何使用struct呢?请看下面的代码:

  type person struct {

  name string

  age int

  }

  var P person // P现在就是person类型的变量了

  P.name = "Astaxie" // 赋值"Astaxie"给P的name属性.

  P.age = 25 // 赋值"25"给变量P的age属性

  fmt.Printf("The person's name is %s", P.name) // 访问P的name属性.

  除了上面这种P的声明使用之外,还有另外几种声明使用方式:

  1.按照顺序提供初始化值

  P := person{"Tom", 25}

  2.通过field:value的方式初始化,这样可以任意顺序

  P := person{age:24, name:"Tom"}

  3.当然也可以通过new函数分配一个指针,此处P的类型为*person

  P := new(person)

  下面我们看一个完整的使用struct的例子:

  package main

  import "fmt"

  // 声明一个新的类型

  type person struct {

  name string

  age int

  }

  // 比较两个人的年龄,返回年龄大的那个人,并且返回年龄差

  // struct也是传值的

  func Older(p1, p2 person) (person, int) {

  if p1.age>p2.age { // 比较p1和p2这两个人的年龄

  return p1, p1.age-p2.age

  }

  return p2, p2.age-p1.age

  }

  func main() {

  var tom person

  // 赋值初始化

  tom.name, tom.age = "Tom", 18

  // 两个字段都写清楚的初始化

  bob := person{age:25, name:"Bob"}

  // 按照struct定义顺序初始化值

  paul := person{"Paul", 43}

  tb_Older, tb_diff := Older(tom, bob)

  tp_Older, tp_diff := Older(tom, paul)

  bp_Older, bp_diff := Older(bob, paul)

  fmt.Printf("Of %s and %s, %s is older by %d years\n",

  tom.name, bob.name, tb_Older.name, tb_diff)

  fmt.Printf("Of %s and %s, %s is older by %d years\n",

  tom.name, paul.name, tp_Older.name, tp_diff)

  fmt.Printf("Of %s and %s, %s is older by %d years\n",

  bob.name, paul.name, bp_Older.name, bp_diff)

  }

  (编辑:雷林鹏 来源:网络)

GO学习笔记:struct类型的更多相关文章

  1. python3.4学习笔记(二) 类型判断,异常处理,终止程序

    python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...

  2. 02-Swift学习笔记-元组类型

    02-Swift学习笔记-元组类型 元组类型由N个任意类型的数据组成(N>=0) 元组类型的数据称为"元素" eg var size = (x:100 , y:100) si ...

  3. c语言学习笔记 - 枚举类型

    今天学习了c语言的枚举类型的使用,可能是PHP里没使用过,开始看的时候还是觉得有点怪,后来做了下例子才理解,这里做个笔记记录一下. #include <stdio.h> enum anim ...

  4. golang 学习笔记 -- struct interface的使用

    一个 interface 类型定义了一个方法集做接口. 区分goalng的方法和函数 func go() { fmt.Println('go to home') } 这是函数 type car str ...

  5. goang学习笔记---struct

    什么是结构体 结构体(struct)是用户自定义的类型,它代表若干字段的集合,可以用于描述一个实体对象,类似java中的class,是golang面向对象编程的基础类型. 如何定义一个结构体 type ...

  6. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  7. c++学习笔记2--constexpr,类型别名,auto

    constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值. 与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句 ...

  8. JS 学习笔记--8---Function类型

    练习使用的浏览器IE11   JS 中Function类型实际上是一种对象,每一个函数实际上都是Function类型的一个实例,每一个函数都有一些默认的属性和方法.由于函数是对象,故函数名实际上也是一 ...

  9. js学习笔记一类型、值和变量

    js的数据类型分为两类:原始类型和对象类型 原始类型包括数字.字符串和布尔值 js中有2个特殊的原始值:null(空)和undefined(未定义) 对象是属性的集合,每个属性都由名/值对组成 js的 ...

  10. Scala学习笔记--集合类型Queue,Set

    补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...

随机推荐

  1. 获取文档版本版本值 滚动标识符 游标 控制查询如何执行 控制查询在哪些分片执行 boost加权

    映射mapping.json{ "book": { "_index": { "enabled": true }, "_id&quo ...

  2. HTTP 协议介绍

    HTTP 协议规定了浏览器和服务器之间互相通信的规则. 请求协议: 规定了客户端发送给服务器的内容格式 响应协议: 服务器发送给客户端的内容格式 请求协议 请求协议格式: 请求行 多个请求头信息(属性 ...

  3. 流畅的python 符合python风格的对象

    对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方式.Python 提供了两种方式. repr() 以便于开发者理解的方式返回对象的字符串表示形式.str() 以便于用户理解 ...

  4. 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本

    问题描述 解决方法 先了解compile comsquareupokhttpokhttp240的意义 了解Jcenter和Maven jcenter Maven Central 理解jcenter和M ...

  5. MySQL具体解释(20)-----------数据库备份和还原

    数据备份: 使用mysqldump命令备份 mysqldump命令能够讲数据库中的数据备份成一个文本文件. 表结果和表中的数据将存储在生成的文本中.mysqldump的工作原理非常easy. 他先查出 ...

  6. MTK平台环境搭建---Ubuntu Linux 下执行sudo apt-get install提示“现在没有可用的软件包……

    问题描述: sudo apt-get install openssh-server 正在读取软件包列表... 完成正在分析软件包的依赖关系树 Reading state information... ...

  7. 什么是web接口

    当我们在请求一个页面的时候,会显示服务器返回的资源,其中包含了HTML.CSS和JS,除此之外,服务器还可以返回图片.视频.字体和插件等类型的资源.这些资源全部由HTTP协议传输. 如果把HTTP协议 ...

  8. Memcached基础介绍

    1.memcached是什么,有什么作用? )memcached是一个开源的.高性能的内存的缓存软件,从名称上看mem就是内存的意思,而cache就是缓存的意思. )memcached通过在事先规划好 ...

  9. vue移动端 滚动 鼠标按下效果

    <div class="item" :id="item.RowID" @touchstart="touchstart(item.RowID)&q ...

  10. LVS原理详解以及部署

    linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU. ...