Golang方法示例:https://play.golang.org/p/AKrvuxF0wMK
Golang方法示例:https://play.golang.org/p/AKrvuxF0wMK 在这个程序中:https://play.golang.org/p/AKrvuxF0wMK
是 (s secretAgent)。
这里的 “s” 在程序的其他地方出现过吗?“s” 有什么特殊含义?
package main
import (
"fmt"
)
type person struct {
first string
last string
}
type secretAgent struct {
person
ltk bool
}
func (s secretAgent) speak() {
fmt.Println("I am", s.first, s.last, " - the secretAgent speak")
}
func (p person) speak() {
fmt.Println("I am", p.first, p.last, " - the person speak")
}
type human interface {
speak()
}
func saySomething(h human) {
h.speak()
}
func main() {
sa1 := secretAgent{
person: person{
first: "James",
last: "Bond",
},
ltk: true,
}
p1 := person{
first: "Dr.",
last: "Yes",
}
fmt.Println(sa1)
sa1.speak()
fmt.Println(p1)
// 错误示例
// p1.speak()
saySomething(sa1)
saySomething(p1)
}
更多关于Golang方法示例:https://play.golang.org/p/AKrvuxF0wMK的实战教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢
更多关于Golang方法示例:https://play.golang.org/p/AKrvuxF0wMK的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
有趣。谢谢!
我仔细研究了您的信息,并将定义保存到文件中。
这个程序有返回值吗?如果有的话,返回值是什么?
哦,天哪,我现在看到 “s” 了,在这里:s.first, s.last
你在任何地方看到 return 关键字了吗?好吧,我也没有看到,所以看起来确实没有。
这段代码的返回值是什么。
你在任何地方看到 return 关键字了吗?好吧,我也没有看到,所以看起来并不存在。
好的,根据你所说的,显然必须存在 return 关键字才能有返回。
绑定函数可以返回值,但您的函数没有返回。它只是打印一些文本。它的工作方式与常规函数相同
func double(x int) int {
return x * 2
}
) 后面的 int 告诉计算机这个函数将返回一个整数。而后面的 return 语句将实现这一点。另一方面,一个只打印某些文本的函数可能不会返回任何内容,在 ) 后面也不会有任何内容。
func printDouble(x int) {
fmt.Println(x * 2)
}
有人能解释一下"接收者"的定义吗? 另外,"返回"的定义是什么? 我找到了这个:返回语句
函数 F 中的"返回"语句会终止 F 的执行,并可以选择提供一个或多个结果值。在 F 返回给调用者之前,由 F 延迟执行的任何函数都会被执行。(语言规范)
他指的是这个吗?有人能详细说明一下吗?
我找不到"接收者"的相关信息。
在这个Go程序中,s 是 secretAgent 类型方法 speak() 的接收者参数。它只在定义该方法的上下文中出现,作为接收者的标识符。
具体分析:
s在方法定义中作为接收者:
func (s secretAgent) speak() {
fmt.Println("I am", s.first, s.last, " - the secretAgent speak")
}
s的作用域仅限于speak()方法内部,用于访问secretAgent实例的字段:
s.first // 访问嵌入的person结构体的first字段
s.last // 访问嵌入的person结构体的last字段
- 在程序的其他地方,如
main()函数中,使用的是具体的变量名:
sa1 := secretAgent{
person: person{
first: "James",
last: "Bond",
},
ltk: true,
}
sa1.speak() // 这里调用时,sa1会作为接收者传递给s参数
secretAgent 结构体嵌入了 person 类型,因此可以直接访问 person 的字段。当调用 sa1.speak() 时,sa1 实例会作为接收者传递给方法中的 s 参数。
类似的,person 类型的 speak() 方法使用 p 作为接收者参数:
func (p person) speak() {
fmt.Println("I am", p.first, p.last, " - the person speak")
}
接收者参数的命名(s、p)是约定俗成的,通常使用类型的首字母缩写,但也可以是任何有效的标识符。


