前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4.Go-结构体,结构体指针和方法

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

作者头像
zhang_derek
发布2019-08-07 15:35:05
1.2K0
发布2019-08-07 15:35:05
举报
文章被收录于专栏:有趣的django

4.1.结构体

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

定义结构体和赋值

代码语言:javascript
复制
//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
复制
//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
复制
//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
复制
//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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.1.结构体
  • 4.2.结构体指针
  • 4.3.方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档