非零基础自学Golang第9章结构体9.5结构体方法-创新互联

非零基础自学Golang

成都创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为济水街道企业提供专业的成都做网站、成都网站建设,济水街道网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。文章目录
      • 非零基础自学Golang
      • 第9章 结构体
        • 9.5 结构体方法
          • 9.5.1 指针类型接收者
          • 9.5.2 值类型接收者

第9章 结构体 9.5 结构体方法

Go语言中,一个方法就是一个包含了接收者的函数。

对于结构体方法,接收者可以是结构体类型的值或是指针。

9.5.1 指针类型接收者

当接收者类型为指针时,可以通过该方法改变该接收者的成员变量值,即使你使用了非指针类型实例调用该函数,也可以改变实例对应的成员变量值。

在以下示例中,我们为User结构体创建了ChangeName方法,在该方法内部将接收者的Name值修改为Tom,接收者的类型为指针类型:

[ 动手写9.5.1 ]

package main

import "fmt"

type User struct {Name  string
   Email string
}

func (u *User) ChangeName() {// 指针类型接收者
   u.Name = "Tom"
}

func main() {u := &User{"Peter", "go@go.com"} // 创建指针类型结构体实例
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)

   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

只要结构体方法的接收者为指针类型,即使实例不是指针类型,修改也能生效:

[ 动手写 9.5.2 ]

package main

import "fmt"

type User struct {Name  string
   Email string
}

func (u *User) ChangeName() {// 指针类型接收者

   u.Name = "Tom"
}

func main() {u := User{"Peter", "go@go.com"} // 创建非指针类型结构体实例
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

9.5.2 值类型接收者

当接收者不是一个指针时,该方法操作对应接收者值的副本,否则即使你使用了指针调用函数,也无法改变成员变量值。

[ 动手写 9.5.3]

package main

import "fmt"

type User struct {Name  string
   Email string
}

func (u User) ChangeName() {// 值类型接收者

   u.Name = "Tom"
}

func main() {u := &User{"Peter", "go@go.com"} //创建指针类型结构体实例

   fmt.Println("Name: ", u.Name, " Email: ", u.Email)

   u.ChangeName()
   fmt.Println("Name: ", u.Name, " Email: ", u.Email)
   
}

运行结果

在这里插入图片描述

如果方法需要修改接收者,接收者必须是指针类型。一般约定的接收者命名是类型的一个或两个字母的缩写(如u或者us之于User)。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

分享文章:非零基础自学Golang第9章结构体9.5结构体方法-创新互联
本文来源:https://www.cdcxhl.com/article6/ceddog.html

成都网站建设公司_创新互联,为您提供网站营销移动网站建设全网营销推广网站设计公司品牌网站建设自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设