Go 物件導向程式設計應用

2022-08-18 18:27:12 字數 2486 閱讀 5806

#### go 物件導向程式設計應用

前面學習了很多的基礎知識,這一節來實際寫乙個小案例:

涉及到的知識:

1. 陣列的基本使用

2. 結構體

3. 切片

4. 方法

5. 迴圈

6. 函式返回值(命名返回值,普通返回值)

備註: 大家也可以在上面加入從終端獲取使用者資訊,將方法動作根據終端選擇繫結

---案例1: 班級管理系統

1. 預設3個班級

2. 學生有姓名,年齡,所在班級屬性

3. 學生可以選擇加入班級,切換班級

package main

import (

"errors"

"fmt"

)// 學生資訊

type student struct

// 班級資訊

type class struct

// 班級列表

var class = [3]class,,,

}// 顯示學生的資訊: 名稱,年齡,所屬班級

func (s *student) showinfo()

// 加入班級方法

func (s *student) joinclass(class string)

var err error

// 要加入班級的索引

var classindex int

classindex, err = searchclassbyname(class)

// 根據查詢的值處理是否加入班級

if err == nil else

}// 學生換班級方法

func (s *student) changeclass(class string)

var err error

var index int // 目標班級的索引

index, err = searchclassbyname(class)

if err != nil

// 將學生加入到新的班級學生列表中

// 學生原來的班級索引

oldstudentclassindex, _ := searchclassbyname(s.class)

// 查詢學生的索引

studentindex := searchstudentbyname(oldstudentclassindex, s.name)

// 使用新的切片儲存

var newstudents = make(student, 0)

if studentindex != 0

class[oldstudentclassindex].students = newstudents

// 加入新班級後將學生的班級更新

s.class = class

}// 根據班級名稱查詢班級的索引

func searchclassbyname(class string) (index int, err error)

}err = errors.new("class is not exist")

return

}// 根據學生名稱和班級索引查詢學生索引

// 此函式由從學生的資訊上獲取class 名稱,再通過class 名稱查詢到class 的索引,所以這個函式沒有錯誤

// todo 如果呼叫的場景不是上述描述的應該會有錯誤

func searchstudentbyname(class int, name string) (index int)

}return

}// 檢視所有班級的資訊

func showclassinfo()

}}// 初始化乙個學生

func newstudent(name string, age int) student

return s

}func main()

xiaohua.joinclass("english")

xiaohua.showinfo()

// xiaojia 加入不存在的班級paint

Go 物件導向程式設計

值語義與引用語義的區別在於賦值。值型別不會改變變數值,引用型別會改變變數值。go 語言中大多數型別都是基於值語義,包括 基本型別 如byte int bool float32 float64和string 復合型別 如陣列 array 結構體 struct 和指標 pointer 等。go語言中的陣...

Go的物件導向程式設計

func p point distance q point float64 p point q point fmt.println distance p,q 5 function call fmt.println p.distance q 5 method call 裡那個附加的引數p,叫做方法的接...

go物件導向程式設計 封裝

將結構體 屬性的字段設定為小寫 給結構體所在的包提供乙個工廠模式,首字母大寫,類似於乙個建構函式 提供乙個首字母大寫的set方法,用於對屬性的判斷並賦值func c student setscore score float64 提供乙個首字母大寫的get方法,用於獲取屬性值func 封裝的實現 ty...