前言
之前接触了一会儿go,现在又有一会儿没写了,拿个题目练练顺便回顾一下,一起来看看吧
程序要求
读取记录有人员名字的文件(一个名字占一行),进行交互式随机点名,被点过的人不会再次被点,当输入q或者全部人员都被点过后退出程序。
实现代码
package main
import (
"fmt"
"io/ioutil"
"math/rand"
"strings"
"time"
)
func main() {
// 读取文件的所有内容
data, err := ioutil.ReadFile("C:/Users/admin/Desktop/go/点名名单.txt")
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
// 将字符串按行拆分为一个字符串数组,windows中以\r\n为换行
lines := strings.Split(string(data), "\r\n")
// 人员个数
num := len(lines)
opt:=""
for {
if num<1 {
fmt.Println("全部人员已点过,程序退出")
break
}
fmt.Print("输入回车进行随机点名,按q退出:")
//接收用户输入赋值给opt,返回参数个数和错误信息
_,err=fmt.Scanln(&opt)
if opt=="q" {
break
}
// 初始化随机种子
rand.Seed(time.Now().Unix())
// 生成一个 0 到 16 之间的随机整数
random := rand.Intn(num)
fmt.Println("恭喜",lines[random])
lines=append(lines, lines[random])
//截取指定下标前面的元素再追加指定下标之后的元素。“...”切片操作符
lines = append(lines[:random], lines[random+1:]...)
num--
}
// 打印每一行的内容
for _, line := range lines {
fmt.Println(line)
}
}