【Go语言】实现一个简单的纯后端学员管理系统,入门级别练手项目,练习结构体,接口,构造函数
GO語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的純后端學(xué)員管理系統(tǒng)
- 項(xiàng)目總覽:
- 一、項(xiàng)目開發(fā)日志
- 二、前情知識(shí)補(bǔ)充
- 1.構(gòu)造函數(shù):用來在創(chuàng)建對(duì)象時(shí)初始化對(duì)象
- 2.方法和接收者
- 三、主函數(shù)中的內(nèi)容
- 四、逐個(gè)自定義函數(shù)拆解分析
- 1.顯示菜單showMenu()函數(shù)
- 2.添加學(xué)員addStudent()函數(shù)
- 3.編輯學(xué)員 modifyStudent()函數(shù)
- 4.展示學(xué)員 showStudent()函數(shù)
- 五、所有代碼展示
- 1.main.go
- 2.student.go
- 六、效果展示:
項(xiàng)目總覽:
1.開發(fā)語言:GO語言
2.IDE:Goland
3.開發(fā)用時(shí):一個(gè)小時(shí)
4.源碼已上傳到我的GitHub,鏈接:https://github.com/2394799692/Student-management-system 或點(diǎn)此跳轉(zhuǎn)
以下是本篇文章正文內(nèi)容,歡迎朋友們進(jìn)行指正,一起探討,共同進(jìn)步。——來自考研路上的lwj。QQ:2394799692
一、項(xiàng)目開發(fā)日志
//1.添加學(xué)員信息 //2.編輯學(xué)員信息 //3.展示所有學(xué)員信息 //分析需求: //先寫一個(gè)學(xué)生結(jié)構(gòu)體,打印一個(gè)系統(tǒng)菜單,等待用戶選擇要執(zhí)行的選項(xiàng),執(zhí)行相應(yīng)動(dòng)作二、前情知識(shí)補(bǔ)充
1.構(gòu)造函數(shù):用來在創(chuàng)建對(duì)象時(shí)初始化對(duì)象
Go語言的結(jié)構(gòu)體沒有構(gòu)造函數(shù),我們可以自己實(shí)現(xiàn)。 例如,下方的代碼就實(shí)現(xiàn)了一個(gè)person的構(gòu)造函數(shù)。 因?yàn)閟truct是值類型,如果結(jié)構(gòu)體比較復(fù)雜的話,值拷貝性能開銷會(huì)比較大,所以該構(gòu)造函數(shù)返回的是結(jié)構(gòu)體指針類型。
func newPerson(name, city string, age int8) *person {return &person{name: name,city: city,age: age,} }//調(diào)用構(gòu)造函數(shù) p9 := newPerson("張三", "沙漠", 90) fmt.Printf("%#v\n", p9) //&main.person{name:"張三", city:"沙漠", age:90}2.方法和接收者
Go語言中的方法(Method)是一種作用于特定類型變量的函數(shù)。這種特定類型變量叫做接收者(Receiver)。接收者的概念就類似于其他語言中的this或者 self。
//方法定義格式: func (接收者變量 接收者類型) 方法名(參數(shù)列表) (返回參數(shù)) {函數(shù)體 } //案例 //Person 結(jié)構(gòu)體 type Person struct {name stringage int8 }//NewPerson 構(gòu)造函數(shù) func NewPerson(name string, age int8) *Person {return &Person{name: name,age: age,} }//Dream Person做夢(mèng)的方法 func (p Person) Dream() {fmt.Printf("%s的夢(mèng)想是學(xué)好Go語言!\n", p.name) }func main() {p1 := NewPerson("小王子", 25)p1.Dream() }方法與函數(shù)的區(qū)別是,函數(shù)不屬于任何類型,方法屬于特定的類型。
三、主函數(shù)中的內(nèi)容
func main() {sm := newStudentMgr()for {showMenu() //1.打印一個(gè)系統(tǒng)菜單//2.等待用戶選擇要執(zhí)行的選項(xiàng)var input intfmt.Print("請(qǐng)輸入你要操作的序號(hào):")fmt.Scanf("%d\n", &input)fmt.Println("用戶輸入的是:", input)//3.執(zhí)行相應(yīng)動(dòng)作switch input {case 1:stu := getInput()sm.addStudent(stu)case 2:stu := getInput()sm.modifyStudent(stu)case 3:sm.showStudent()case 4:os.Exit(0)}} }四、逐個(gè)自定義函數(shù)拆解分析
1.顯示菜單showMenu()函數(shù)
func showMenu() {fmt.Println("歡迎來到學(xué)員信息管理系統(tǒng)")fmt.Println("1.添加學(xué)員")fmt.Println("2.編輯學(xué)員信息")fmt.Println("3.展示所有學(xué)員信息")fmt.Println("4.退出系統(tǒng)") }2.添加學(xué)員addStudent()函數(shù)
func (s *studentMgr) addStudent(newStu *student) {s.allStudents = append(s.allStudents, newStu) }3.編輯學(xué)員 modifyStudent()函數(shù)
func (s *studentMgr) modifyStudent(newStu *student) {for i, v := range s.allStudents {if newStu.id == v.id { //當(dāng)學(xué)號(hào)相同時(shí),表示找到了要修改的學(xué)生s.allStudents[i] = newStu //根據(jù)切片的索引直接把新學(xué)生賦值進(jìn)來return}//如果走到這里說明輸入的學(xué)生沒有找到fmt.Println("輸入的學(xué)生信息有誤,系統(tǒng)中沒有學(xué)號(hào)是:%d的學(xué)生\n", newStu.id)} }4.展示學(xué)員 showStudent()函數(shù)
func (s *studentMgr) showStudent() {for _, v := range s.allStudents {fmt.Printf("學(xué)號(hào):%d 姓名:%s 班級(jí):%s\n", v.id, v.name, v.class)} }五、所有代碼展示
1.main.go
package mainimport ("fmt""os" )//學(xué)員信息管理系統(tǒng)//1.添加學(xué)員信息 //2.編輯學(xué)員信息 //3.展示所有學(xué)員信息 //分析需求: //先寫一個(gè)學(xué)生結(jié)構(gòu)體,打印一個(gè)系統(tǒng)菜單,等待用戶選擇要執(zhí)行的選項(xiàng),執(zhí)行相應(yīng)動(dòng)作func showMenu() {fmt.Println("歡迎來到學(xué)員信息管理系統(tǒng)")fmt.Println("1.添加學(xué)員")fmt.Println("2.編輯學(xué)員信息")fmt.Println("3.展示所有學(xué)員信息")fmt.Println("4.退出系統(tǒng)") }//獲取用戶輸入的學(xué)員信息 func getInput() *student { //返回值stu為*student類型var (id intname stringclass string)fmt.Println("請(qǐng)按要求輸入學(xué)員信息")fmt.Print("請(qǐng)輸入學(xué)員的學(xué)號(hào):")fmt.Scanf("%d\n", &id)fmt.Print("請(qǐng)輸入學(xué)員的姓名:")fmt.Scanf("%s\n", &name)fmt.Print("請(qǐng)輸入學(xué)員的班級(jí):")fmt.Scanf("%s\n", &class)//就能拿到用戶輸入的學(xué)員的所有信息stu := newStudent(id, name, class) //調(diào)用student的構(gòu)造函數(shù)構(gòu)造一個(gè)學(xué)生return stu } func main() {sm := newStudentMgr()for {showMenu() //1.打印一個(gè)系統(tǒng)菜單//2.等待用戶選擇要執(zhí)行的選項(xiàng)var input intfmt.Print("請(qǐng)輸入你要操作的序號(hào):")fmt.Scanf("%d\n", &input)fmt.Println("用戶輸入的是:", input)//3.執(zhí)行相應(yīng)動(dòng)作switch input {case 1:stu := getInput()sm.addStudent(stu)case 2:stu := getInput()sm.modifyStudent(stu)case 3:sm.showStudent()case 4:os.Exit(0)}} }2.student.go
package mainimport "fmt"//定義一個(gè)結(jié)構(gòu)體描述學(xué)生信息 type student struct {id intname stringclass string }//定義student類型的構(gòu)造函數(shù) func newStudent(id int, name, class string) *student {return &student{id: id,name: name,class: class,} }//學(xué)員管理的類型 type studentMgr struct {allStudents []*student //定義一個(gè)student類型的切片 }//這是studentMgr的構(gòu)造函數(shù) func newStudentMgr() *studentMgr {return &studentMgr{allStudents: make([]*student, 0, 100), //初始化切片} }//1.添加學(xué)員 func (s *studentMgr) addStudent(newStu *student) {s.allStudents = append(s.allStudents, newStu) }//2.編輯學(xué)員 func (s *studentMgr) modifyStudent(newStu *student) {for i, v := range s.allStudents {if newStu.id == v.id { //當(dāng)學(xué)號(hào)相同時(shí),表示找到了要修改的學(xué)生s.allStudents[i] = newStu //根據(jù)切片的索引直接把新學(xué)生賦值進(jìn)來return}//如果走到這里說明輸入的學(xué)生沒有找到fmt.Println("輸入的學(xué)生信息有誤,系統(tǒng)中沒有學(xué)號(hào)是:%d的學(xué)生\n", newStu.id)} }//3.展示學(xué)生 func (s *studentMgr) showStudent() {for _, v := range s.allStudents {fmt.Printf("學(xué)號(hào):%d 姓名:%s 班級(jí):%s\n", v.id, v.name, v.class)} }六、效果展示:
1)開始頁面:
2)添加學(xué)員:
3)修改學(xué)員和查看學(xué)員:
4)退出頁面:
總結(jié)
以上是生活随笔為你收集整理的【Go语言】实现一个简单的纯后端学员管理系统,入门级别练手项目,练习结构体,接口,构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: form表单提交且接口回调显示提交成功
- 下一篇: Windows操作系统+朝鲜红星+国产麒