09.go语言结构体、值接受者/指针接受者、指针和值
2018-02-13 11:11
791 查看
1.结构体
package mainimport (
“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" ) // user 在程序里定义一个用户类型 type user struct { name string email string } // notify 使用值接收者实现了一个方法 func (u user) notify() { fmt.Printf("Sending User Email To %s<%s>\n", u.name, u.email) } // changeEmail 使用指针接收者实现了一个方法 func (u *user) changeEmail(email string) { u.email = email } // main 是应用程序的入口 func main() { // user 类型的值可以用来调用 // 使用值接收者声明的方法 bill := user{"Bill", "bill@email.com"} bill.notify() // 指向 user 类型值的指针也可以用来调用 // 使用值接收者声明的方法 lisa := &user{"Lisa", "lisa@email.com"} //此处可以理解为(*lisa).notify() //notify 操作的是一个副本,只不过这次操作的是 //从 lisa 指针指向的值的副本 lisa.notify() // user 类型的值可以用来调用 // 使用指针接收者声明的方法 bill.changeEmail("bill@newdomain.com") bill.notify() // 指向 user 类型值的指针可以用来调用 // 使用指针接收者声明的方法 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) } // main 是应用程序的入口 func main() { bill := user{"a", "b@qq.com"} temp := 123 bill.notify(temp) log.Println(temp) bill.notify2(&temp) log.Println(temp) }
相关文章推荐
- GO语言结构体方法跟结构体指针方法的区别
- Go语言中结构体方法副本传参与指针传参的区别介绍
- Go语言指针访问结构体的方法
- Go语言的方法接受者类型用值类型还是指针类型?
- Go语言的方法接受者类型用值类型还是指针类型?
- go语言之指针
- go语言初始化内部结构体3中方式
- go语言笔记——指针,和C用法以及本质一样,但不支持指针的+-运算!
- go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针
- C语言结构体里的成员数组和指针
- Go语言学习笔记--类型、指针、面向对象
- GO语言为结构体排序
- Go语言学习之指针(The way to go)
- GO语言学习 指针&内存
- C语言结构体与指针实现病历查询功能
- Go语言的指针的一些测试
- C语言程序设计 第七章 指针与结构体 指针数组 例题
- C语言结构体里的成员数组和指针
- Go -- go语言指针
- [置顶] 【go 指针数组】go语言中的指针数组