鍍金池/ 問答/GO  HTML/ 實現(xiàn)結(jié)構(gòu)體方法時候,是否加星號。

實現(xiàn)結(jié)構(gòu)體方法時候,是否加星號。

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())
}

運行結(jié)果來看,目前得到的結(jié)果是一樣的,為什么教材上要寫成 *Book?

回答
編輯回答
夢一場

官方答案在此

receiver(Book)其實就是函數(shù)的一個參數(shù)而已,所以用struct就會有復制且不能修改屬性
反過來看,用pointer,那么book就有被函數(shù)修改的風險

2017年6月28日 07:31