当我们要表示同一种数据类型时候,可以用到数组,切片和字典。 当我们要表示不同的数据类型呢?这时候就要用到结构体了

一:定义struct

关键字 type 和 struct 来定义结构体

type student struct {
name string
age int
}

二:struct赋值

var stu student
stu.name = "Tom"
stu.age =
fmt.Printf("name %s, age: %d", stu.name, stu.age)

除了上面,还有下面几种方式:

1.提供顺序初始化
stu := person{"Tom", 20}
2.通过field:value的方式初始化,可以是任意顺序
stu := person{"age":20, "name":"Tom"}
3:也可以通过new分配指针
stu := new(person)

完整例子:

package main

import "fmt"

type person struct {
name string
age int
} func main() {
var stu person
//赋值初始化
stu.name, stu.age = "Tom", //根据field:value初始化
jimmy := person{age: , name: "jimmy"} //按照顺序初始化
mike := person{"mike", } fmt.Println(stu.name, jimmy.name, mike.name, jimmy.age, mike.age)
}

三:结构体传递参数

package main

import "fmt"

//结构体传递参数
type Rect struct {
with, length float64
} func double_area(rect Rect) float64 {
rect.with *=
rect.length *=
return rect.with * rect.length
} func main() {
var rect = Rect{, }
area := double_area(rect)
fmt.Println(area)
}

四:结构体函数

上面我们在main函数计算了双倍矩形面积,但是double_area不能作为 Rect 的方法实现,而是将Rect对象作为参数传给了函数计算,还有没有其他方法实现呢,当然有

package main

import "fmt"

type Rect struct {
with, length float64
} func (r Rect) double_area() float64 {
r.with *=
r.length *=
return r.with * r.length
} func main() {
var rect = Rect{, }
fmt.Println(rect.double_area())
}

五:  结构体内嵌类型

我们可以在一个结构体内部定义一个结构体类型的成员

package main

import "fmt"

type Phone struct {
price int
color string
} type IPhone struct {
phone Phone
model string
} func main() {
var p IPhone
p.phone.price =
p.phone.color = "red"
p.model = "ipone 6s"
fmt.Println("Price:", p.phone.price)
fmt.Println("Color:", p.phone.color)
fmt.Println("Model:", p.model)
}

六:struct匿名字段

上面我们定义了一个嵌套结构体, 实际上go也提供一种不写名字嵌套的结构体,也就是匿名字段

package main

import "fmt"

type Phone struct {
price int
color string
} type IPhone struct {
Phone //匿名字段,那么默认IPhone就包含了Phone所有字段
model string
} func main() {
var p IPhone
p.Phone.price = //直接 p.Phone.price 赋值
p.Phone.color = "glod"
p.model = "ipone 7p"
fmt.Println("Price:", p.Phone.price)
fmt.Println("Color:", p.Phone.color)
fmt.Println("Model:", p.model)
}

最新文章

  1. Scrapy003-项目流程
  2. Spring学习之第一个hello world程序
  3. JSP获取客户端的IP地址的方法
  4. linux添加字体的过程
  5. 自己实现Single LinkedList
  6. (转) MFC的入口点与消息循环,消息映射
  7. android 的开源输入法介绍,及 自动触摸的实现方法
  8. 聊聊css盒子模型
  9. position:fixed定位时 “高度坍塌” 问题的解决
  10. ICE-3.5.1-错误记录
  11. Codeforces 626D Jerry's Protest(暴力枚举+概率)
  12. xml报错 Parse Fatal Error :在实体引用中,实体名称必须紧跟在'&'后面
  13. Java_监听器监听文件夹变动
  14. Silverlight网页打开后马上崩溃,“白屏”,而且毫无提示
  15. scrapy系列(二)——startproject、genspider创建项目与模板使用
  16. VirtualBox虚拟机安装Mac OS 10.12
  17. 正则匹配-URL-域名
  18. 进程的环境变量environ
  19. python------栈和队列的实现
  20. python3 安装

热门文章

  1. bootloader架构设计
  2. java数据结构复习01
  3. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)
  4. 如何代替set get方法
  5. share point 查询文档库 过滤 文档名称和上传时间
  6. Python分布式+云计算
  7. Ubuntu中linux虚拟机全屏
  8. pt-archiver使用记录
  9. 【leetcode】1185. Day of the Week
  10. C#调用Python(二)