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. 基于Requests和BeautifulSoup实现“自动登录”

    基于Requests和BeautifulSoup实现“自动登录”实例 自动登录抽屉新热榜 #!/usr/bin/env python # -*- coding:utf-8 -*- import req ...

  2. 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  3. Hibernate框架ORM的实现原理

    1. 什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库 ...

  4. Event对象、队列、multiprocessing模块

    一.Event对象 线程的一个关键特性是每个线程都是独立运行且状态不可预测.如果程序中的其他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就 会变得非常棘手.为了解决这些问题, ...

  5. threading模块、ThreadLocal

    一.threading模块 1.线程对象的创建 1.1 Thread类直接创建 import threading import time def countNum(n): # 定义某个线程要运行的函数 ...

  6. Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别

    Sql Server 中 GAM.SGAM.PAM.IAM.DCM 和 BCM 的详解与区别   GAM.SGAM.PAM.IAM.DCM 和 BCM 都是 SQL Server 中用来管理空间分配的 ...

  7. 吴超老师课程---ZooKeeper介绍和集群安装

    1.ZooKeeper    1.1 zk可以用来保证数据在zk集群之间的数据的事务性一致.2.如何搭建ZooKeeper服务器集群    2.1 zk服务器集群规模不小于3个节点,要求各服务器之间系 ...

  8. 如何在浏览器网页中显示word文件内容

    如何在浏览器网页中显示word文件内容 把word文件读到byte[]中,再Response.OutputStream.Write(bytes)到客户端去 Page_Load事件中写: //FileS ...

  9. 解释一下python中的关系运算符

    关系运算符用于比较两个值 1.小于号,如果左边的值较小,则返回Trueprint('hi'<'Hi')#False 2.大于号,如果左边的值较大,则返回Trueprint(1.1+2.2> ...

  10. 第六课 GDB调试 (上)

    1序言: 1.初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率.有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办 ...