接口详解和猜数字游戏详解 | 青训营

125 阅读2分钟

1、接口(interface)

通过与内置接口的连接实现将学生以成绩的大小进行排序

1.声明和定义

package main

import (

    "fmt"

    "sort"

    "math/rand"

    "time"

)

2.定义结构体,对结构体定义结构体切片,然后多结构体声明方法--Len(),Less(),Swap() 这三个方法是固定的,是在swap这个包下的Swap()这个接口下的方法,必须事先声明这三个方法才能使用这个接口

屏幕截图 2023-07-27 180112.png

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)