Go 面向对象编程应用
生活随笔
收集整理的這篇文章主要介紹了
Go 面向对象编程应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#### Go 面向對象編程應用
前面學習了很多的基礎知識,這一節來實際寫一個小案例:
涉及到的知識:
1. 數組的基本使用
2. 結構體
3. 切片
4. 方法
5. 循環
6. 函數返回值(命名返回值,普通返回值)
備注: 大家也可以在上面加入從終端獲取用戶信息,將方法動作根據終端選擇綁定
---
案例1: 班級管理系統
1. 默認3個班級
2. 學生有姓名,年齡,所在班級屬性
3. 學生可以選擇加入班級,切換班級 package mainimport ("errors""fmt" )// 學生信息 type Student struct {// 名稱Name string// 年齡Age int// 所屬班級Class string }// 班級信息 type Class struct {// 班級名稱Name string// 班級中所有的學生Students []Student }// 班級列表 var CLASS = [3]Class{{Name: "Music"},{Name: "Math"},{Name: "English"}, } // 顯示學生的信息: 名稱,年齡,所屬班級 func (s *Student) showInfo() {fmt.Printf("Name: %s,Age: %d,Class: %s\n", s.Name, s.Age, s.Class) }// 加入班級方法 func (s *Student) joinClass(class string) {// 加入班級前判斷是否已經加入班級//TODO 如果初始化學生實例設置了class 則不能加入任何班級if s.Class != "" {return}var err error// 要加入班級的索引var classIndex intclassIndex, err = searchClassByName(class)// 根據查找的值處理是否加入班級if err == nil {// 更改學生的班級s.Class = classCLASS[classIndex].Students = append(CLASS[classIndex].Students, *s)} else {// 要加入的班級不存在fmt.Println("class is not exist,join failed")} }// 學生換班級方法 func (s *Student) changeClass(class string) {// 換班級前先檢查是否已經在某個班級if s.Class == class {fmt.Println("當前學生已存在目標班級")return}var err errorvar index int // 目標班級的索引index, err = searchClassByName(class)if err != nil {// 查找的班級不存在fmt.Println("查找的班級不存在")return}// 將學生加入到新的班級學生列表中CLASS[index].Students = append(CLASS[index].Students, *s)// 學生原來的班級索引oldStudentClassIndex, _ := searchClassByName(s.Class)// 查找學生的索引studentIndex := searchStudentByName(oldStudentClassIndex, s.Name)// 使用新的切片存儲var newStudents = make([]Student, 0)if studentIndex != 0 {newStudents = append(CLASS[index].Students[:studentIndex], CLASS[index].Students[index+1:]...)}CLASS[oldStudentClassIndex].Students = newStudents// 加入新班級后將學生的班級更新s.Class = class }// 根據班級名稱查找班級的索引 func searchClassByName(class string) (index int, err error) {for i, val := range CLASS {if val.Name == class {index = ireturn}}err = errors.New("class is not exist")return }// 根據學生名稱和班級索引查找學生索引 // 此函數由從學生的信息上獲取class 名稱,再通過class 名稱查找到class 的索引,所以這個函數沒有錯誤 // TODO 如果調用的場景不是上述描述的應該會有錯誤 func searchStudentByName(class int, name string) (index int) {for i, val := range CLASS[class].Students {if val.Name == name {// 查找到了學生index = i}}return }// 查看所有班級的信息 func showClassInfo() {for _, val := range CLASS {fmt.Println("當前班級:", val.Name)for _, stu := range val.Students {fmt.Println("當前班級有學生:", stu)}} }// 初始化一個學生 func newStudent(name string, age int) Student {s := Student{Name: name,Age: age,}return s } func main() {// xiaoMing 加入Musicvar xiaoMing StudentxiaoMing = newStudent("xiaoMing", 20)xiaoMing.joinClass("Music")xiaoMing.showInfo()// xiaoHu加入Musicvar xiaoHu StudentxiaoHu = newStudent("xiaoHu", 18)xiaoHu.joinClass("Music")xiaoHu.showInfo()// xiaoHong 加入Mathvar xiaoHong StudentxiaoHong.Name = "xiaoHong"xiaoHong.Age = 22xiaoHong.joinClass("Math")xiaoHong.showInfo()// xiaoHua 加入EnglishxiaoHua := Student{Name: "xiaoHua",Age: 23,}xiaoHua.joinClass("English")xiaoHua.showInfo()// xiaoJia 加入不存在的班級PaintxiaoJia := Student{Name: "xiaoJia",Age: 21,}xiaoJia.joinClass("Paint")xiaoJia.showInfo()showClassInfo()fmt.Println("xiaoHu change class Math")xiaoHu.changeClass("Math")showClassInfo()xiaoHu.showInfo()fmt.Println("xiaoHua change class Math")xiaoHua.changeClass("Math")showClassInfo()xiaoHua.showInfo() }
前面學習了很多的基礎知識,這一節來實際寫一個小案例:
涉及到的知識:
1. 數組的基本使用
2. 結構體
3. 切片
4. 方法
5. 循環
6. 函數返回值(命名返回值,普通返回值)
備注: 大家也可以在上面加入從終端獲取用戶信息,將方法動作根據終端選擇綁定
---
案例1: 班級管理系統
1. 默認3個班級
2. 學生有姓名,年齡,所在班級屬性
3. 學生可以選擇加入班級,切換班級 package mainimport ("errors""fmt" )// 學生信息 type Student struct {// 名稱Name string// 年齡Age int// 所屬班級Class string }// 班級信息 type Class struct {// 班級名稱Name string// 班級中所有的學生Students []Student }// 班級列表 var CLASS = [3]Class{{Name: "Music"},{Name: "Math"},{Name: "English"}, } // 顯示學生的信息: 名稱,年齡,所屬班級 func (s *Student) showInfo() {fmt.Printf("Name: %s,Age: %d,Class: %s\n", s.Name, s.Age, s.Class) }// 加入班級方法 func (s *Student) joinClass(class string) {// 加入班級前判斷是否已經加入班級//TODO 如果初始化學生實例設置了class 則不能加入任何班級if s.Class != "" {return}var err error// 要加入班級的索引var classIndex intclassIndex, err = searchClassByName(class)// 根據查找的值處理是否加入班級if err == nil {// 更改學生的班級s.Class = classCLASS[classIndex].Students = append(CLASS[classIndex].Students, *s)} else {// 要加入的班級不存在fmt.Println("class is not exist,join failed")} }// 學生換班級方法 func (s *Student) changeClass(class string) {// 換班級前先檢查是否已經在某個班級if s.Class == class {fmt.Println("當前學生已存在目標班級")return}var err errorvar index int // 目標班級的索引index, err = searchClassByName(class)if err != nil {// 查找的班級不存在fmt.Println("查找的班級不存在")return}// 將學生加入到新的班級學生列表中CLASS[index].Students = append(CLASS[index].Students, *s)// 學生原來的班級索引oldStudentClassIndex, _ := searchClassByName(s.Class)// 查找學生的索引studentIndex := searchStudentByName(oldStudentClassIndex, s.Name)// 使用新的切片存儲var newStudents = make([]Student, 0)if studentIndex != 0 {newStudents = append(CLASS[index].Students[:studentIndex], CLASS[index].Students[index+1:]...)}CLASS[oldStudentClassIndex].Students = newStudents// 加入新班級后將學生的班級更新s.Class = class }// 根據班級名稱查找班級的索引 func searchClassByName(class string) (index int, err error) {for i, val := range CLASS {if val.Name == class {index = ireturn}}err = errors.New("class is not exist")return }// 根據學生名稱和班級索引查找學生索引 // 此函數由從學生的信息上獲取class 名稱,再通過class 名稱查找到class 的索引,所以這個函數沒有錯誤 // TODO 如果調用的場景不是上述描述的應該會有錯誤 func searchStudentByName(class int, name string) (index int) {for i, val := range CLASS[class].Students {if val.Name == name {// 查找到了學生index = i}}return }// 查看所有班級的信息 func showClassInfo() {for _, val := range CLASS {fmt.Println("當前班級:", val.Name)for _, stu := range val.Students {fmt.Println("當前班級有學生:", stu)}} }// 初始化一個學生 func newStudent(name string, age int) Student {s := Student{Name: name,Age: age,}return s } func main() {// xiaoMing 加入Musicvar xiaoMing StudentxiaoMing = newStudent("xiaoMing", 20)xiaoMing.joinClass("Music")xiaoMing.showInfo()// xiaoHu加入Musicvar xiaoHu StudentxiaoHu = newStudent("xiaoHu", 18)xiaoHu.joinClass("Music")xiaoHu.showInfo()// xiaoHong 加入Mathvar xiaoHong StudentxiaoHong.Name = "xiaoHong"xiaoHong.Age = 22xiaoHong.joinClass("Math")xiaoHong.showInfo()// xiaoHua 加入EnglishxiaoHua := Student{Name: "xiaoHua",Age: 23,}xiaoHua.joinClass("English")xiaoHua.showInfo()// xiaoJia 加入不存在的班級PaintxiaoJia := Student{Name: "xiaoJia",Age: 21,}xiaoJia.joinClass("Paint")xiaoJia.showInfo()showClassInfo()fmt.Println("xiaoHu change class Math")xiaoHu.changeClass("Math")showClassInfo()xiaoHu.showInfo()fmt.Println("xiaoHua change class Math")xiaoHua.changeClass("Math")showClassInfo()xiaoHua.showInfo() }
個人微信公眾號會發布最新文章,歡迎關注一同交流學習
轉載于:https://www.cnblogs.com/Mail-maomao/p/11458983.html
總結
以上是生活随笔為你收集整理的Go 面向对象编程应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 结构体方法
- 下一篇: openresty开发系列40--ngi