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. Virtualbox报错------>make sure the kernel module has been loaded successfully

    错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...

  2. ORACLE性能优化- Buffer cache 的调整与优化

    Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的 free buffer waits事件. 下面将具 ...

  3. redis的数据类型与应用场景(二)

    1. 如何学习 redis有好多数据类型,有这么多数据类型,我们不可能每个都记得完完全全.但是我们必须知道它有哪些数据类型,每个数据类型是怎样的,有什么作用.redis的每一个数据类型都有一大堆命令, ...

  4. Linux环境安装配置maven

     按照下面命令执行即可 1.下载apache-maven-3.5.3-bin.tar.gz 并上传到服务器上 提取地址:https://pan.baidu.com/s/11nxZp84lmonRBCR ...

  5. 开博第一篇,学习markdown

    Markdown学习 其实之前自己也一直有记录,不过是Evernote记录,没有分享出来,最近看了一些牛人博客,觉得也应该分享出来.和别人多交流,多学习.所以花了几小时学了一下Markdown语法,现 ...

  6. 快速排序算法Java版

    网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调.所以整理了这篇文章.如果有不妥之处还请建议.首先先复习一些基础.    1.算法概念. ...

  7. Centos学习笔记2-网络部分

    一:修改IP地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=192.168.80.100 NETMASK=255.255.255.0 GA ...

  8. yum速查

    yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包, 能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖 ...

  9. Rest_framework-3

    目录: 返回值的封装 分页 视图 路由 渲染器 一 返回值的封装 a. API的基本框架 setting: 1 首先注册rest_framework 2 版本配置 REST_FRAMEWORK = { ...

  10. get app id

    Install Download the Web AppBuilder for ArcGIS (Developer Edition) ZIP file to your local drive and ...