4.Go-结构体、结构体指针和方法
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
}
4.Go-结构体、结构体指针和方法的更多相关文章
- 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->成员 ...
- Go-结构体,结构体指针和方法
https://cloud.tencent.com/developer/article/1482382 4.1.结构体 结构体:讲一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类 ...
- C++-Typedef结构体遇上指针
继Typedef遇上结构体数组后,我们又产生了新的疑问. 上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html 昨天一位朋友又问我了,说结构体数组 ...
- C#调用C/C++动态库 封送结构体,结构体数组
一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- C语言结构体(struct)使用方法
基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuf ...
随机推荐
- Orm框架(AntOrm,Ktorm)在mac机器上如何使用代码生成
Orm框架介绍 AntOrm 是我维护的一个开源csharp -netcore 项目 Ktorm 是一个大神开源的kotlin项目 由于我工作上都用到了,为了提高工作效率 我写了一个mac端工具帮助快 ...
- LeetCode20——有效的括号
在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试.想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了 ...
- 关于使用IDEA,使用Maven打包项目
关于使用IDEA,使用Maven打包项目 在近期的一个接口项目中,使用的是SpringBoot + Maven的配置, 由于使用IDEA不久,不太熟悉使用Maven进行项目打包.记录一下. 由于使用的 ...
- redis命令之 ----Set(集合)
SADD SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创 ...
- JDBC的安装与使用
JDBC的安装 首先在登录MySQL的官网下载JDBC-MySQL数据库驱动,或者去www.mysql.com/products/connector直接下载. 因为jdbc包属于第三方包,因此要自己导 ...
- [转]WPF入门教程系列
转载自:https://www.cnblogs.com/chillsrc/category/684419.html 谢谢浏览!
- mongodb 更新数据时int32变为double的解决办法 & 教程
https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html mongodb 更新数据时int32变为double的解决办法 ...
- 2019-7-29-win10-UWP-使用-MD5算法
原文:2019-7-29-win10-UWP-使用-MD5算法 title author date CreateTime categories win10 UWP 使用 MD5算法 lindexi 2 ...
- yii2 HeadersAlreadySentException 报错
An Error occurred while handling another error:exception 'yii\web\HeadersAlreadySentException' with ...
- MyBatis面试题集合,90%会遇到这些问题
1.#{}和${}的区别是什么? ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. ...