写点什么

Go- 方法 -1

用户头像
HelloBug
关注
发布于: 47 分钟前
Go- 方法-1

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
用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- 方法-1