Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4.Go-结构体,结构体指针和方法

4.Go-结构体,结构体指针和方法

作者头像
zhang_derek
发布于 2019-08-07 07:35:05
发布于 2019-08-07 07:35:05
1.2K00
代码可运行
举报
文章被收录于专栏:有趣的django有趣的django
运行总次数:0
代码可运行

4.1.结构体

结构体:讲一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型

定义结构体和赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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()函数创建结构体指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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)创建方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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)修改值,用指针

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
5.Go-封装、继承、接口、多态和断言
Go语言开发者认为:面向对象就是特定类型(结构体)有着自己的方法,利用这个方法完成面向对象编程,
zhang_derek
2019/08/08
1.7K0
GO系列(1)-interface{} 多参数... 封装继承多态
参考:https://geekr.dev/posts/go-func-params-and-return-values
爽朗地狮子
2022/10/20
5450
Golang数据类型之结构体-上篇
1、结构体介绍 2、结构体的定义 3、构造结构体实例 4、声明与初始化 5、属性的访问和修改 1、结构体介绍 为什么要有结构体? 数组只能保存同一种类型的数据,当需要记录多种不同类型的数据,并
仙人技术
2021/08/31
8860
Golang数据类型之结构体-上篇
9.Go-反射、日志和线程休眠
9.1反射 在Go语言标准库中reflect包提供了运行时反射,程序运行过程中动态操作结构体 当变量存储结构体属性名称,想要对结构体这个属性赋值或查看时,就可以使用反射 反射还可以用作判断变量类型 整个reflect包中最重要的两个类型 reflect.Type类型 reflect.Value值 获取到Type和Value的函数 reflect.TypeOf(interface{})返回type reflect.ValueOf(interface{})返回值Value   (1)获取变量属性和值 //Lea
zhang_derek
2019/08/12
3830
100天精通Golang(基础入门篇)——第18天:深入解析Go语言中的结构体
在第18天的学习中,我们将深入探索Go语言中的结构体,这是Go语言中一个非常核心的概念。结构体为我们提供了一种封装多个不同类型数据的方法,是构建复杂数据类型的基础。
猫头虎
2024/04/09
1350
100天精通Golang(基础入门篇)——第18天:深入解析Go语言中的结构体
结构体
该程序定义了 emp4,却没有初始化任何值。因此 firstName 和 lastName 赋值为 string 的零值("")。而 age 和 salary 赋值为 int 的零值(0)
酷走天涯
2019/06/11
1.2K0
golang之Struct什么是结构体struct?
最近在复习golang,学习的东西,如果不使用,很快就会忘记。所以,准备复习完golang,做一个练手的小项目,加深对golang的学习。今天开始公司,进入封闭式开发,所以每天晚上回来,学习golan
若与
2018/04/25
1.7K0
golang之Struct什么是结构体struct?
Golang之旅36-方法和工厂模式
在创建了一个结构体之后,结构体可能还具有一些行为,比如Person结构体还有说话、跑步、学习等,此时通过方法才能完成。
皮大大
2021/03/02
2120
Golang结构体初探
Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。也就是我们可以通过struct来定义自己的类型了。
PayneWu
2020/12/18
5920
10分钟学会Go结构体类型
结构是表示字段集合的用户定义类型。它可以用于将数据分组为单个单元而不是将每个数据作为单独的值的地方。 例如,员工有firstName、lastName和age。将这三个属性分组到一个名为Employee。
兔云小新LM
2022/11/21
4740
Go程序例子(19):结构体
Go 的结构体(struct)是字段的类型化集合。它们非常适合将数据组合在一起以形成记录。
用户11078756
2024/12/13
570
Go程序例子(19):结构体
Go基础系列:14. 指针类型
先了解什么是内存地址?说通俗点就是电脑上数据存储位置的编号,就好比我们的身份证号一样。
潇洒哥和黑大帅
2021/09/22
8110
Go基础系列:14. 指针类型
golang 结构体的思考
小熊工作做不完了,周末又要加班了, c++ 项目好不容易在不同的指令集编译出来,结果一跑就挂,连日志都没有,难受!
机智的程序员小熊
2020/05/20
9190
Golang之继承,多重继承(struct)
热乎的代码来了 package main import "fmt" /* 继承 一个结构体嵌到另一个结构体,称作组合 匿名和组合的区别 如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承 如果一个struct嵌套了另一个【有名】的结构体,那么这个模式叫做组合 如果一个struct嵌套了多个匿名结构体,那么这个结构可以直接访问多个匿名结构体的方法,从而实现多重继承 */ type Car struct { weight int name
超蛋lhy
2018/08/31
2.2K0
go-结构体
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。
新人小试
2020/03/09
6170
Golang数据类型之结构体-下篇
c1、c2、c3都是car struct的实例,c2, c3是指向实例的指针,指针中保存的是实例的地址,所以指针再指向实例,c1则是直接指向实例。这三个变量与Car struct实例的指向关系如下
仙人技术
2021/08/31
9040
Golang数据类型之结构体-下篇
Golang之接口(interface)
 //Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口。
超蛋lhy
2018/08/31
1K0
Go语言中的结构体和方法
在Go语言中,可以使用struct关键字定义结构体。结构体定义了一个包含多个字段的数据类型,每个字段都有一个名称和类型。
数字扫地僧
2024/06/16
1410
Go基础之--结构体和方法
结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型。 每个变量都叫做结构体的成员。 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语言放弃了包括继承在内的大量面向对象的特性,只保留了组合这个基础的特性。 所有的Go语言类型除了指针类型外,都可以有自己的方法。 先通过一个下的例子理解struct,下面的这个例子用于定义一个student的struct,这个机构体有以下属性:Name,Age,Sex,Score,分别表示这个学生的名字,年龄,
coders
2018/03/30
6940
Go基础之--结构体和方法
6.Go编程快速入门学习
描述: 在Go语言中接口(interface)是一种类型,一种抽象的类型, 其定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。
全栈工程师修炼指南
2022/09/29
1.1K0
6.Go编程快速入门学习
相关推荐
5.Go-封装、继承、接口、多态和断言
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验