1、接口(interface)
通过与内置接口的连接实现将学生以成绩的大小进行排序
1.声明和定义
package main
import (
"fmt"
"sort"
"math/rand"
"time"
)
2.定义结构体,对结构体定义结构体切片,然后多结构体声明方法--Len(),Less(),Swap() 这三个方法是固定的,是在swap这个包下的Swap()这个接口下的方法,必须事先声明这三个方法才能使用这个接口
type Stu struct {
name string
age int
score float64
}
type StuSlice []Stu
func (s StuSlice) Len() int { 方法1 获取结构体切片的长度
return len(s)
}
func (s StuSlice) Less(i int,j int) bool { //方法2 实现对两个数的大小比较,这里控制的是结果的升序还是降序
return s[i].score < s[j].score //此处表示升序
}
func (s StuSlice) Swap(i int,j int) { 方法三 如果方法2的返回值是false,则此处将会将这两个数交换
s[i],s[j]=s[j],s[i]
}
3.最后主函数里面的代码实现
func main(){
var stus StuSlice
rand.Seed(time.Now().UnixNano()) //下一个种子,控制随机性
for i := 0;i<10;i++{
stu:=Stu{
name:fmt.Sprintf("同学%d",rand.Intn(100)),
age:rand.Intn(100),
score:float64(rand.Intn(100)),
} //依次给结构体进行赋值
stus=append(stus,stu) //添加带结构体切片中
}
// 打印前的结果
for _,v := range stus {
fmt.Println(v)
}
fmt.Println("------")
通过这个接口实现排序
sort.Sort(stus)
// 打印后的结果
for _,v := range stus {
fmt.Println(v)
}
}
2.猜谜游戏
生成随机数 一个简单的猜数字游戏。程序开始时会生成一个随机的秘密数字,并提示玩家输入猜测的数字。玩家每次输入一个数字后,程序会告诉玩家这个数字是偏大还是偏小,直到玩家猜对为止。如果输入非数字或者在读取输入时出现错误,程序会提示玩家重新输入。玩家猜对秘密数字后,游戏结束并输出"you guess"
func main() {
maxnum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxnum)
fmt.Println("the secrrt is", secretNumber)
}
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading input:", err)
return
}
input = strings.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter a valid integer.")
return
}
fmt.Print("you guess", guess)