Go-结构体,结构体指针和方法
https://cloud.tencent.com/developer/article/1482382
4.1.结构体
结构体:讲一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型
定义结构体和赋值
//Learn_Go/main.go
package main import "fmt" type People struct {
Name string
Age int
} func main() {
var peo People
fmt.Println(peo) //{ 0}
fmt.Printf("%p",&peo) //0x110040f0 //赋值
//第一种
peo = People{"derek",20}
fmt.Println(peo) //{derek 20}
//第二种
peo2 := People{Age:12,Name:"jack"}
fmt.Println(peo2) //{jack 12} //第三种
peo.Name = "alice"
peo.Age = 25
fmt.Println(peo) //{alice 25}
}
4.2.结构体指针
由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成
可以结合new()函数创建结构体指针
//Learn_Go/main.go
package main import "fmt" type People struct {
Name string
Age int
} func main() {
peo := new(People)
fmt.Println(peo) //&{ 0}
fmt.Println(peo == nil) //false peo.Name = "derek"
peo.Age = 22
fmt.Println(peo) //&{derek 22} peo2 := peo
fmt.Println(peo2) //&{derek 22} peo2.Name = "Jack"
fmt.Println(peo, peo2) //&{Jack 22} &{Jack 22}
}
4.3.方法
方法和函数语法比较像,区别是函数属于包,通过包调用函数,而方法属于结构体,通过结构体变量调用
默认是函数,隶属于包,所以需要添加标识,告诉编译器这个方法属于哪个结构体
(1)创建方法
//Learn_Go/main.go
package main import "fmt" type People struct {
Name string
Weight int
} func (p People) run() {
fmt.Println(p.Name,"正在跑步,当前体重为:",p.Weight)
} func main() {
peo := People{"derek",120}
peo.run() //derek 正在跑步,当前体重为: 120
}
(2)修改值,用指针
//Learn_Go/main.go
package main import "fmt" type People struct {
Name string
Weight int
} func (p *People) run() {
fmt.Println(p.Name,"正在跑步,当前体重为:",p.Weight)
//运行一次run方法,体重减去1
p.Weight -= 1
} func main() {
peo := People{"derek",120}
peo.run() //derek 正在跑步,当前体重为: 120
fmt.Println("跑完步后的体重为:",peo.Weight) //跑完步后的体重为: 119
}
Go-结构体,结构体指针和方法的更多相关文章
- 4.Go-结构体、结构体指针和方法
4.1.结构体 结构体:将一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型 定义结构体和赋值 //Learn_Go/main.go package main import &q ...
- C语言结构体(struct)使用方法
基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuf ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- file结构体中private_data指针的疑惑
转:http://www.360doc.com/content/12/0506/19/1299815_209093142.shtml hi all and barry, 最近在学习字符设备驱动,不太明 ...
- C语言 指向结构体变量的指针
一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Stu ...
- file结构体中private_data指针的疑惑【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/3328984.html hi all and barry, 最近在学习字符设备驱动,不太明白private ...
- C/C++中指向结构体变量的指针,调用指向的那个结构体中的成员
设p是指向结构体变量的指针,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名.如,stu.num. (2)(*p).成员名.如,(*p).num. (3)p->成员 ...
- vector存放结构体数据的2种方法
如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...
- C++-Typedef结构体遇上指针
继Typedef遇上结构体数组后,我们又产生了新的疑问. 上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html 昨天一位朋友又问我了,说结构体数组 ...
随机推荐
- HDU 2018 DP
A - 母牛的故事 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- JS获取最近三个月日期范围
function getLast3Month() { var now = new Date(); var year = now.getFullYear(); var month = now.getMo ...
- ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码
现在网上有很多类似的文章.其实这一篇也借鉴了很多其他博主的文章. 写这篇文章的重点是在于解析功能和报文.对Modbus这个协议并不会做很多介绍. 好了,我们开始吧. 常用的功能码其实也没多少.我也就按 ...
- JMeter-命令行模式压测
前言 使用非GUI模式,即命令行模式运行jmeter测试脚本能够大大缩减系统资源,今天跟小伙伴们讲一下JMeter如何在命令行模式进行压测吧! 一:配置好JDK和JMeter的环境变量(过程略) 二: ...
- fancybox图片灯箱功能
fancybox图片灯箱功能 在页面中引入几个文件 <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery ...
- Android 有关在ListView RecycleView 中使用EditText Checkbox的坑
这是一篇文字超多的博客,哈哈哈,废话自行过滤··· 遇到问题 在开发中我们常会在ListView , RecycleView 列表中添加EditText输入框,或者checkbox复选框. 复选框 ...
- SRAM结构框图解
SRAM 即静态RAM.它也由晶体管组成,SRAM的高速和静态特性使它们通常被用来作为Cache存储器.计算机的主板上都有Cache插座. 下图所示的是一个SRAM的结构框图. 由上图看出SRAM一般 ...
- WebStorm2018破解教程
话不多说,直接上教程: 1,下载压缩包,并解压缩,下载地址如下: 链接:谁点谁知道提取码:9am8 2,双击压缩包中的WebStorm-2018.2.1.exe文件,进行安装. 3,安装完成之后,将压 ...
- pom.xml配置文件详解(Maven)
注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 注:本文转载自:https://blog.csdn.net/u012152619/article/deta ...
- jQuery---jQuery插件
jQuery插件 使用插件的步骤 1. 引入jQuery文件 2. 引入插件(如果有用到css的话,需要引入css) 3. 使用插件 <!--1. 引入jquery的js文件--> < ...