Go- 方法 -1
发布于: 47 分钟前
Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
方法的定义
方法和未导出字段的使用
内嵌类型的方法继承
代码示例可以直接运行
person.go
package person
type Person struct {
firstName string
lastName string
}
func (p *Person) FirstName() string {
return p.firstName
}
func (p *Person) SetFirstName(newName string) {
p.firstName = newName
}
复制代码
main.go
package main
import (
"fmt"
"person"
)
func printDivider(str ...string) {
fmt.Println()
fmt.Println("-----------------------------------------------")
if len(str) > 0 {
fmt.Println(str)
}
}
type MyClass struct {
name string
age uint8
}
type NewClass struct {
MyClass // 继承类型MyClass的同时,也会继承MyClass的方法
tel string
}
func main() {
/*
方法的定义
1、某种类型可以定义该类型可以有的方法
2、类型的声明和方法的定义可以不在同一个文件中,但必须在同一个包中
*/
printDivider("方法的定义")
p1 := MyClass{"Mark", 100} // 调用方法时,p1可以是指针,也可以是实例
p1.PrintInfo() // p1 会作为函数的参数进行传递 输出:name = Mark, age = 100
p1.SetAge(18)
p1.PrintInfo() // 输出:name = Mark, age = 18
//PrintInfo(p1) 编译错误:undefined: PrintInfo 方法不能单独调用
/*
方法和未导出字段的使用
*/
printDivider("方法和未导出字段的使用")
p2 := new(person.Person)
//p2.firstName = "Marry" // 编译错误:cannot assign to p.FirstName
p2.SetFirstName("Marry")
fname := p2.FirstName()
fmt.Println(fname) // 输出:Marry
/*
内嵌类型的方法继承
*/
printDivider("内嵌类型的方法继承")
p3 := NewClass{MyClass{"Jack", 21}, "17234561298"}
p3.PrintInfo() // 输出:name = Jack, age = 21 NewClass类型的p3可以直接使用MyClass的方法
p3.SetAge(55)
p3.PrintInfo() // 输出:name = Jack, age = 55
}
func (mc MyClass) PrintInfo() { // 函数头为:func (mc *MyClass) PrintInfo()也可以,传递参数的时候,一个传递值,一个传递值的引用
fmt.Printf("name = %s, age = %d\n", mc.name, mc.age)
return
}
func (mc *MyClass) SetAge(age uint8) {
mc.age = age
return
}
复制代码
划线
评论
复制
发布于: 47 分钟前阅读数: 3
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/3597764f2386374843f1ed16c】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论