zoukankan      html  css  js  c++  java
  • go 结构体指针方法与结构体方法的区别

    package main
    
    import "fmt"
    
    type Person struct {
    	name string
    	age  int
    }
    
    func (v *Person) modifyName(name string) {
    	p := v
    	p.name = name
    }
    
    func main() {
    	xiaoMing := Person{name: "xiaoming", age: 20}
    	xiaoMing.modifyName("小李")
    	fmt.Println(xiaoMing.name)
    }

    输出结果如下:

    C:UsersEthanDesktopGOStudy est>go run test.go
    小李

    将上面代码的改成接受结构体的修改名称方法

    package main
    
    import "fmt"
    
    type Person struct {
    	name string
    	age  int
    }
    
    func (v Person) modifyName(name string) {
    	p := v
    	p.name = name
    }
    
    func main() {
    	xiaoMing := Person{name: "xiaoming", age: 20}
    	xiaoMing.modifyName("小李")
    	fmt.Println(xiaoMing.name)
    }

    输出结果如下:

    C:UsersEthanDesktopGOStudy est>go run test.go
    xiaoming

    结论:

    接受为结构体指针的方法对原先定义的结构体能够改变名称

    接受为结构体的方法改变不了原先的结构体的值,需要重新定义个变量来传递新的值

    下面修改的代码可以实现同样的效果:

    package main

    import "fmt"

    type Person struct {
    name string
    age int
    }

    func (v Person) modifyName(name string) Person {
    p := v
    p.name = name
    return p
    }

    func main() {
    xiaoMing := Person{name: "xiaoming", age: 20}
    p:=xiaoMing.modifyName("小李")
    fmt.Println(p.name)
    }

    输出结果:

    C:UsersEthanDesktopGOStudy est>go run test.go
    小李

    总结:

    效率高的话还是使用结构体指针,直接修改

  • 相关阅读:
    J2ME 游戏开发之GameCanvas的使用
    J2ME游戏开发之字符串的绘制
    JS数组操作
    什么是LBS?地理位置服务
    js中的this怎么理解
    相机参数
    boost 移植到ARM EP9315
    armlinuxgcc 安装和配置
    小算法 : 水仙花数
    C语言标准库 文件操作
  • 原文地址:https://www.cnblogs.com/EthanSun/p/13725240.html
Copyright © 2011-2022 走看看