GO语言中的方法值和方法表达式的使用方法详解
Go语言也称Golang,兼具效率、性能、安全、健壮等特性。
Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定。本文重点给大家介绍go方法值和方法表达式的知识。
手册上关于这块的解释感觉不是很详细清晰,经过几个示例自己总结了下这块的用法。
方法表达式:说简单点,其实就是方法对象赋值给变量。
这里有两种使用方式:
1)方法值:隐式调用,struct实例获取方法对象
2) 方法表达式:显示调用,struct类型获取方法对象,需要传递struct实例对象作为参数。
举个例子:
packagemain import( "fmt" ) typeStudentstruct{ idint namestring } func(s*Student)SkillPointer(){ fmt.Printf("指针型函数:%p,%v\n",s,s) } func(sStudent)SkillValue(){ fmt.Printf("值类型函数:%p,%v\n",&s,s) } funcmain(){ s:=Student{1,"乔帮主"}//结构体实例化 //常规使用方式 s.SkillPointer() fmt.Println(".............................\n") //方法表达式 sFunc1:=(*Student).SkillPointer//注意这里直接使用指针型结构体名称.方法 sFunc1(&s)//显示的把接收者*Student传递过去 sFunc2:=Student.SkillValue//注意这里直接使用结构体名称.方法 sFunc2(s)//显示的把接收者Student传递过去 fmt.Println(".............................\n") //方法值 sFunc3:=s.SkillPointer//这个就是方法值,调用函数时,无需再传递接收者,隐藏了接收者 sFunc3()//是不是有点像匿名函数调用,声明了变量sFunc3为结构体的方法名,然后变量()调用。有点多此一举的感觉毛? sFunc4:=s.SkillValue//因为没有调用指针方法,这里完成内容拷贝的操作,区别在哪里,稍后会举例看到 sFunc4() fmt.Println(".............................\n") }
输出:
指针型函数:0xc00007c060,&{1乔帮主}
.............................
指针型函数:0xc00007c060,&{1乔帮主}
值类型函数:0xc00007c0e0,{1乔帮主}
.............................
指针型函数:0xc00007c060,&{1乔帮主}
值类型函数:0xc00007c140,{1乔帮主}
.............................
刚才说的方法值得方式是拷贝,有啥区别,接下来我们看看:
packagemain import( "fmt" ) typeStudentstruct{ idint namestring } func(s*Student)SkillPointer(){ fmt.Printf("指针型函数:%p,%v\n",s,s) } func(sStudent)SkillValue(){ fmt.Printf("值类型函数:%p,%v\n",&s,s) } funcmain(){ u:=Student{1,"乔帮主"} mValue:=u.SkillValue//因为不是指针类型,不受下面修改的影响。 u.id,u.name=2,"鸠摩智" u.SkillValue() mValue()//值未变,不受影响 }
输出:
值类型函数:0xc0000044c0,{2鸠摩智}
值类型函数:0xc000004520,{1乔帮主}
如果要全部更新,换成mValue:=u.SkillPointer 指针型函数即可。
无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。
总结
到此这篇关于GO语言中的方法值和方法表达式的使用方法详解的文章就介绍到这了,更多相关go方法值和方法表达式内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。