#### go 物件導向程式設計應用前面學習了很多的基礎知識,這一節來實際寫乙個小案例:
涉及到的知識:
1. 陣列的基本使用
2. 結構體
3. 切片
4. 方法
5. 迴圈
6. 函式返回值(命名返回值,普通返回值)
備註: 大家也可以在上面加入從終端獲取使用者資訊,將方法動作根據終端選擇繫結
---案例1: 班級管理系統
1. 預設3個班級
2. 學生有姓名,年齡,所在班級屬性
3. 學生可以選擇加入班級,切換班級
package mainimport (
"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...