GO语言中的方法值和方法表达式的使用方法详解-创新互联

Go语言也称 Golang,兼具效率、性能、安全、健壮等特性。

站在用户的角度思考问题,与客户深入沟通,找到临沂网站设计与临沂网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请网站空间、企业邮箱。业务覆盖临沂地区。

Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定。本文重点给大家介绍go 方法值和方法表达式的知识。

手册上关于这块的解释感觉不是很详细清晰,经过几个示例自己总结了下这块的用法。

方法表达式:说简单点,其实就是方法对象赋值给变量。

这里有两种使用方式:

1)方法值:隐式调用, struct实例获取方法对象

2)  方法表达式:显示调用, struct类型获取方法对象, 需要传递struct实例对象作为参数。

举个例子:

package main
import (
 "fmt"
)
type Student struct {
 id int
 name string
}
func (s *Student) SkillPointer() {
 fmt.Printf("指针型函数:%p, %v\n", s, s)
}
func (s Student) SkillValue() {
 fmt.Printf("值类型函数: %p, %v\n", &s, s)
}
func main() {
 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")
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:GO语言中的方法值和方法表达式的使用方法详解-创新互联
URL网址:http://csdahua.cn/article/dphgog.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流