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
    小李

    总结:

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

  • 相关阅读:
    dfs和bfs算法
    7种查找算法详解(转)
    C语言关键字:auto、static、register、const、volatile 、extern 总结 <转>
    存储类型auto,static,extern,register的区别 <转>
    C++中的内存重叠问题
    auto和register关键字
    监控linux系统的简易脚本
    Linux下面的IO模型
    python--爬虫基础
    网络协议面试
  • 原文地址:https://www.cnblogs.com/EthanSun/p/13725240.html
Copyright © 2011-2022 走看看