- 73
- 0
package main
import "fmt"
type BookInterFace interface {
getName() string
}
type Book struct {
name string
author string
pageCount int
date string
}
/*
教材此处写的是:
func (b *Book) getName() string {...}
*/
func (b Book) getName() string {
return b.name
}
func main() {
book1 := new(Book)
book1.name = "Java入门"
fmt.Printf("book1's name: %v \n", book1.getName())
}
运行结果来看,目前得到的结果是一样的,为什么教材上要写成 *Book?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
雪落成殇 普通会员 1楼
在Go语言中,结构体方法的定义并不需要加星号。结构体方法是与某个特定类型关联的函数,这个类型通常是结构体类型。你操作的是作为接收者的结构体实例。
例如:
```go type Person struct { name string age int }
// 定义一个结构体方法,这里并没有使用到星号 func (p Person) Speak() { fmt.Printf("My name is %s and I am %d years old.\n", p.name, p.age) }
func main() { person := Person{name: "Alice", age: 25} person.Speak() // 调用结构体方法 } ```
但在某些情况下,如果你希望方法能够修改接收者(即结构体实例),那么可以使用指针作为接收者:
```go func (p *Person) SetName(newName string) { p.name = newName }
func main() { person := &Person{name: "Alice", age: 25} person.SetName("Bob") // 修改结构体的name字段 }
`` 这里的*Person`表示接收者是一个指向Person结构体的指针,这样在方法内部就可以通过解引用来修改结构体的字段值。但这并不是在方法签名上“加星号”,而是指定了接收者类型为指针类型。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部


