1.结构体
package main
import (
“log”
)
//结构体
type user struct {
name string
email string
ext int
privileged bool
}
//嵌套结构体
type admin struct {
person user
level string
}
func main() {
lisa := user{name: "Lisa",
email: "lisa@email.com",
ext: 123,
privileged: true}
log.Println(lisa)
fred := admin{
person: user{
name: "Lisa",
email: "lisa@email.com",
ext: 123,
privileged: true},
level: "super",
}
log.Println(fred)
}
2.使用指针接收者声明的方法
:调用时会使用这个值的一个副本来执行
使用值接受者声明方法
:
package main
import (
"fmt"
)
type user struct {
name string
email string
}
func (u user) notify() {
fmt.Printf("Sending User Email To %s<%s>\n",
u.name,
u.email)
}
func (u *user) changeEmail(email string) {
u.email = email
}
func main() {
bill := user{"Bill", "bill@email.com"}
bill.notify()
lisa := &user{"Lisa", "lisa@email.com"}
lisa.notify()
bill.changeEmail("bill@newdomain.com")
bill.notify()
lisa.changeEmail("lisa@newdomain.com")
lisa.notify()
}
总结一下,
值接收者使用值的副本来调用方法,
而指针接受者使用实际值来调用方法。
3.传递指针和值的区别
package main
import (
"log"
)
type user struct {
name string
email string
}
func (u user) notify(temp int) {
temp = 124
log.Println(temp)
}
func (u user) notify2(temp *int) {
*temp = 250
log.Println(*temp)
}
func main() {
bill := user{"a", "b@qq.com"}
temp := 123
bill.notify(temp)
log.Println(temp)
bill.notify2(&temp)
log.Println(temp)
}