学生系统功能: 显示所有学生,增加学生,删除学生,修改学生信息,按照score 对学生进行排序
package main
import (
"fmt"
"sort"
)
type Student_ struct {
id int
name string
age int
score float32
}
//定义学生数组 prepare for sort
func( s Class_) Len() int{
return len(s.students)
}
//按照成绩从大到小排序
func (s Class_) Less(i,j int) bool{
return s.students[i].score>s.students[j].score
}
//引用类型进行交换就行
func (s Class_) Swap(i,j int){
s.students[i],s.students[j]=s.students[j],s.students[i]
}
type Class_ struct {
class_name string
//一个班级可以容纳多个学生 定义成切片方便操作
students [] Student_
}
func (c *Class_) Delet_student(id int){// 主要要用到切片的删除
stu:=make([]Student_,0,200) // 重新定义一个切片
for i,j:=range c.students{
if j.id==id{
continue
}
fmt.Println(j)
stu=append(stu,c.students[i])
}
c.students=stu
}
func (c *Class_)show_all(){
for _,j:=range(c.students){
fmt.Println(j.id,j.name,j.age,j.score)
//fmt.Println(j)
}
}
func(c *Class_) alter_student_information(id int,name string,age int,score float32){
for _,j :=range c.students{
if j.id==id{
j.name=name
j.age=age
j.score=score
}
}
}
func (c *Class_)add_stu(id int,name string,age int,score float32){
//因为c为指针接收者(影响原来类型的值),所以用&来初始一个stu
stu:=Student_{id,name,age,score}
c.students=append(c.students,stu)
}
//按照学生成绩排序 c应该是引用类型 返回一个新的值让其接受
func (c *Class_) score_sort() {
sort.Sort(c)
// 打印所有排完序的数据
for _, j:= range(c.students){
fmt.Println(j)
}
}
func main () {
p:=Class_{"1001",
make([]Student_,0,200), //对切片进行一个实例化
}
p.add_stu(10,"bosh",12,96)
p.add_stu(11,"bosh1",13,98)
p.add_stu(13,"bosh2",15,68)
p.show_all()
//fmt.Println("修改id 为13号的学生信息")
//p.alter_student_information(13,"bosh3",16,89)
//p.show_all()
p.score_sort()
fmt.Println("删除11号学生")
p.Delet_student(11)
p.show_all()
}
注意在go 语言中方法和函数是不一样的。一个方法就是一个包含了接收者的函数,接收者可以是命名类型或者结构体类型的一个值或一个指针。这里我采用的是方法,并且接收者是一个指针。
函数语法:
func 函数名 (参数) 返回值{
函数体
}
方法语法:
func (接收者) 方法名() 返回值{
方法体
}
运行结果
