• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > Go语言struct类型介绍

Go语言struct类型介绍

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了go语言介绍,go语言,go语言环境搭建,go语言程序设计,let it go 25种语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

struct

我们可以声明新的类型,作为其它类型的属性或字段容器。
如,创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名&年龄。这样的类型我们称之为struct。
type person struct{
        name string
        age int
}
</div>

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 属性 .
</div>


除了上面这种P的声明使用之外,还有其他两种声明使用方式

1、按照顺序提供初始化值
P := person{"Liuxinming", 28}
</div>

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

P := person{age:28, name:"Liuxinming"}
</div>

举例:

package main

import "fmt"

//声明一个新的类型
type person struct {
 name string
 avg  int
}

//比较两个人的年龄,返回年龄大的那个人,并且返回年龄差
//struct 也是传值的
func older(p1, p2 person) (person, int) {
 if p1.avg > p2.avg { //比较p1和p2年龄
  return p1, p1.avg - p2.avg
 }
 return p2, p2.avg - p1.avg
}

func main() {
 var tom person
 //赋值初始化
 tom.name, tom.avg = "Tom", 18

 //两个字段都写清楚的初始化
 bob := person{avg: 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)
}
</div>

输出结果如下:

Of Tom and Bob, Bob is older by 7 years
Of Tom and Paul, Paul is older by 25 years
Of Bob and Paul, Paul is older by 18 years
</div>

struct的匿名字段

我们上面介绍了如何定义一个struct,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。

当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入了当前定义的这个struct:
// struct2.go
package main

import (
 "fmt"
)

type Human struct {
 name   string
 age    int
 weight int
}
type Student struct {
 Human      //匿名字段,那么默认struct就包含了Human所有字段
 speciality string
}

func main() {
 //初始化一个学生
 mark := Student{Human{"Mark", 25, 100}, "Computer Science"}

 //访问相应的字段
 fmt.Println("His name is ", mark.name)
 fmt.Println("His age is ", mark.age)
 fmt.Println("His weight is ", mark.weight)
 fmt.Println("His speciality is ", mark.speciality)

 //修改对应的信息
 mark.speciality = "AI"
 fmt.Println("Mark changed his speciality")
 fmt.Println("His speciality is ", mark.speciality)
 //  修改他的年龄信息
 fmt.Println("Mark become old")
 mark.age = 46
 fmt.Println("His age is", mark.age)
 //  修改他的体重信息
 fmt.Println("Mark is not an athlet anymore")
 mark.weight += 60
 fmt.Println("His weight is", mark.weight)
}
</div>

输出结果:

His name is  Mark
His age is  25
His weight is  100
His speciality is  Computer Science
Mark changed his speciality
His speciality is  AI
Mark become old
His age is 46
Mark is not an athlet anymore
His weight is 160
</div>

</div>

您可能想查找下面的文章:

  • Go语言struct类型介绍
  • Go语言中的复合类型详细介绍

相关文章

  • golang网络socket粘包问题的解决方法
  • Go语言里的new函数用法分析
  • Go语言图片处理和生成缩略图的方法
  • Go语言排序与接口实例分析
  • Golang编程实现生成n个从a到b不重复随机数的方法
  • Go语言中struct的匿名属性特征实例分析
  • Go语言基础学习教程
  • Go语言单链表实现方法
  • GO语言make()分配用法实例
  • GO语言运行环境下载、安装、配置图文教程

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Go中map数据类型3点小知识
    • sublime安装支持go和html的插件
    • Go语言判断指定文件是否存在的方法
    • Golang学习笔记(一):简介
    • Go语言实现的排列组合问题实例(n个数中取m个)
    • Golang算法问题之整数拆分实现方法分析
    • go语言里包的用法实例
    • Go语言编程中字符串切割方法小结
    • Go语言中的方法定义用法分析
    • go语言base64用法实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有