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语言中的方法值和方法表达式的使用方法详解-创新互联
分享地址:http://www.jxjierui.cn/article/dphgog.html


咨询
建站咨询
