Golang基础(4):Go结构体
当我们要表示同一种数据类型时候,可以用到数组,切片和字典。 当我们要表示不同的数据类型呢?这时候就要用到结构体了
一:定义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)
}
Golang基础(4):Go结构体的更多相关文章
- Golang通过反射获取结构体的标签
Golang通过反射获取结构体的标签 例子: package main import ( "fmt" "reflect" ) type resume struc ...
- 换个语言学一下 Golang (9)——结构体和接口
基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,G ...
- golang 使用reflect反射结构体
"反射结构体"是指在程序执行时,遍历结构体中的字段以及方法. 1.反射结构体 下面使用一个简单的例子说明如何反射结构体. 定义一个结构体,包括3个字段,以及一个方法. 通过refl ...
- Go语言基础六:结构体和方法
结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...
- 黑马程序员——C语言基础 变量类型 结构体
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...
- 12、C#基础整理(结构体)
结构体 1.概念: 结构体是写在main函数外的数据结构,由不同类型的数据组合成一个整体,这些组合在一个整体中的数据是互相联系的 2.声明方式: struct 结构体名 { 成员变量(由类型名+成员名 ...
- Delphi基础Write写入结构体到文件(使用 file of myrecord就行了,真简单)
program WriteStruct; {$APPTYPE CONSOLE} uses SysUtils; //写入结构体 type TCustomer = record ID: ]; Code: ...
- golang 兼容不同json结构体解析实践
线上服务器,同一个web接口有时需要兼容不同版本的结构体.这种情况思路是使用interface{}接收任意类型数据,结合reflect包处理. 如下,http接口调用者会传入不同的json结构数据(单 ...
- 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
直接上例子: 要求: 合理的设计一个”学生“类 学生有* 姓名* 生日两个属性和说出自己姓名生日方法 要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄 描述学生类 事物名称: 学生(Stud ...
- C# 基础之类与结构体的区别
1.语法上的区别是: 定义类使用关键字class,定义结构体用关键字struct 2.结构体中不可对声明字段进行初始化,但类可以 3. 类:如果没有为类显示的定义一个构造函数,c#编译器会自动生成一个 ...
随机推荐
- byteArray转换为double,int
/*将int转为低字节在前,高字节在后的byte数组 b[0] = 11111111(0xff) & 01100001 b[1] = 11111111(0xff) & (n & ...
- pycharm使用已经配置好的virtualenv环境
前面已经介绍过基本的virtualenv使用方法,如想要了解的同学可以跳转https://www.cnblogs.com/weilijie/p/10964872.html 下面进入正题,我使用的是py ...
- .net中对象序列化技术
序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...
- Fiddler抓包的简单使用
Fiddler抓包的简单使用 参考的博客文章:玲虫师的<Fiddler抓包[5]_Fiddler过滤>. (1)使用fiddler进行过滤,只抓取需要的网络请求. 点击右侧菜单中的[Fil ...
- Python核心技术与实战——十二|Python的比较与拷贝
我们在前面已经接触到了很多Python对象比较的例子,例如这样的 a = b = a == b 或者是将一个对象进行拷贝 l1 = [,,,,] l2 = l1 l3 = list(l1) 那么现在试 ...
- strtok的使用
/* strtok函数的使用 */ #include <stdio.h> #include <stdlib.h> #include <string.h> // 函数 ...
- Redux 聊聊
前言 Redux 是 JavaScript 状态容器,提供可预测化的状态管理. 首先明确一点的就是: Redux并不是React必须的,也没有任何依赖,你可以很自由的将他应用到各种前端框架.jQuer ...
- Apache服务器配置https
https://startssl.com这个网站可以给我们免费提供可信任的https证书,这里简单介绍一下配置的过程. 首先服务器需要安装openssl和apache的mod_ssl.so模块,并且需 ...
- 在UIScrollView、UICollectionView和UITableView中添加UIRefreshControl实现下拉刷新
Apple在iOS 6中添加了UIRefreshControl,但只能在UITableViewController中使用,不能在UIScrollView和UICollectionView中使用. 从i ...
- 设计模式-Interpreter(行为模式) 使用解释器给用户提供一个一门定义语言的语法表示的解释器,通过该解释器解释语言中的句子。
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Context.h #pragma once class Context { public: Context(); ~ ...