go语言中结构体如何定义方法和通过方法修改结构体中的值
值类型和引用类型
值类型:改变变量副本值的时候,不会改变变量本身的值(数组、基本数据类型、结构体)
引用类型: 改变变量副本值的时候,会改变变量本身的值(切片、map)
结构体,改变副本时不影响变量本身
package main
import ("fmt")
type Person struct {
name string
age int
}
func main() {
var p1 = Person{
name: "张三",
age: 18,
}
p2 := p1
// 结构体,改变副本时不影响变量本身
p2.name = "李四"
fmt.Printf("%#v\n", p1)
fmt.Printf("%#v", p2)
}
main.Person{name:"张三", age:18}
main.Person{name:"李四", age:18}
在 go 语言中,没有类的概念。
但是可以给类型(结构体,自定义类型)定义方法。
所谓方法:就是定义了接收者的函数。
接收者的概念就类似于其他语言中的 this 或者 self。
结构体方法的定义格式如下:
func (接收者变量 接收者类型) 方法名(参数列表) (返参数) {
方法体
}
结构体定义的方法与函数定义的方法有所不同
package main
import ("fmt")
type Person struct {
name string
age int
sex string
}
// 如果没有返回类型,可以不写返回类型的哈
func (p Person) PersonInfo(){
fmt.Printf("名称:%v",p.name)
}
func main() {
var p1 = Person{
name:"张三",
age:18,
sex:"男",
}
p1.PersonInfo()
}
输出:名称:张三
通过方法修改结构体里面的值
package main
import ("fmt")
type Person struct {
name string
age int
sex string
}
// 如果没有返回类型,可以不写返回类型的哈
func (p Person) PersonInfo(){
fmt.Printf("名称:%v",p.name)
}
// 通过这样的方式可以修改结构体的值
func (p *Person) setName(name string) {
p.name = name
}
// 结构体,是值类型,通过下面的方式不能修改age的值
func (p Person) setAge(age int) {
p.age = age
}
func main() {
var p1 = Person{
name:"张三",
age:18,
sex:"男",
}
p1.setName("张四")
p1.setAge(10)
fmt.Printf("%#v", p1)
}
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
支付宝
微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号