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 ...
随机推荐
- 第02组 Beta冲刺(2/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 ...
- 小玩意儿之Gitlab 代码提交日志同步到禅道项目管理系统
以前都是使用禅道官方推荐的服务器本地扫描的方式,但其实不太方便,需要跟着项目的变化,不断的在配置文件维护项目相应仓库的配置. 然后现在Web Hooks越来越普遍的情况下,想尝试一种新的方式.看了禅道 ...
- 模型的细致程度--Level of Development
模型的细致程度,英文称作Level of Details,也叫作Level of Development.描述了一个BIM模型构件单元从最低级的近似概念化的程度发展到最高级的演示级精度的步骤.美国建筑 ...
- [LeetCode#180]Consecutive Numbers
Write a SQL query to find all numbers that appear at least three times consecutively. +----+-----+ | ...
- python Condition
import threading # 必须要使用condition的例子 # class XiaoAi(threading.Thread):# def __init__(self, lock):# s ...
- 基于OceanStor Dorado V3存储之数据保护 Hyper 特性
基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1 快照 1.2 HyperCDP 1.3 HyperCopy 1.4 克隆(HyperClone) 1.5 ...
- 前端开发JS——对象与原型
27.创建对象 ①工厂模式批量创建对象 缺点:无法对象识别,即所有对象都是Object类型;方法内存空间浪费/封装不太完善 function sayName(){ //可以有效节省内存空间 c ...
- vue cli 3.0快速创建项目
本地安装vue-cli 前置条件 更新npm到最新版本 命令行运行: npm install -g npmnpm就自动为我们更新到最新版本 淘宝npm镜像使用方法 npm config set reg ...
- UILabel的各种属性和方法
转自:http://liulu200888an.blog.163.com/blog/static/3498972320121214208542/ UILabel *label1 = [[UILabe ...
- elasticsearch7 配置篇
学习了这么多,终于开始搭建生产环境了,这一篇主要讲解配置项,以及支持中文分词的ik安装,集群的搭建. 配置项确实挺多的,但把几个常用配置熟悉就好,而且就像elasticsearch官方文档所说,不存在 ...