一.猜谜游戏
1. 生成随机数
首先生成随机数,但是rand.seed()好像已经被弃用,我在写的时候加上和删去seed都能生成随机数。
但是如果没有rand.seed()每次调用函数都会生成不同的随机数,有的话就不会
下面是生成随机数的函数
func getNumber() int {
maxNum := 100
rand.Seed(time.Now().UnixNano()) //有send
secretNumber := rand.Intn(maxNum)
return secretNumber
}
func main() {
secretNumber := getNumber()
c1 := getNumber()
fmt.Println(secretNumber) //输出34
fmt.Println(c1) //输出34
fmt.Println(getNumber()) //输出34
}
生成的数字每次调用都是不同的随机数
func getNumber() int {
maxNum := 100
secretNumber := rand.Intn(maxNum) //无send
return secretNumber
}
func main() {
secretNumber := getNumber()
c1 := getNumber()
fmt.Println(secretNumber) //输出41
fmt.Println(c1) //输出52
fmt.Println(getNumber()) //输出76
}
2. 获取输入数字
用 fmt.Scanln()可以获取用户输入的数据fmt.Scanln()可以根据数据类型将用户输入的数据进行类型转换
userNumber := 0
fmt.Scanln(&userNumber)
下面是视频中老师的代码,
因为win系统中的enter代表\r\n,所以需要将两个都去掉
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println(secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("error1", err)
return
}
input = strings.TrimSuffix(input, "\n")
input = strings.TrimSuffix(input, "\r")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("error2", err)
return
}
fmt.Println("you guess", guess)
}
3. 猜数字
我把猜数字的代码写在了secretfunc函数中, 用for循环当用户输入数字等于随机数时停止循环,在循环中用if判断数字大小
func getNumber() int {
maxNum := 100
secretNumber := rand.Intn(maxNum)
return secretNumber
}
func secretfunc(secretNumber int) {
userNumber := 0
fmt.Println("请输入0-100的数字")
fmt.Scanln(&userNumber)
for secretNumber != userNumber {
if userNumber > secretNumber {
fmt.Println("你输入的数偏大")
} else {
fmt.Println("你输入的数偏小")
}
fmt.Println("请重新输入")
fmt.Scanln(&userNumber)
}
fmt.Println("你猜对了")
}
func main() {
secretNumber := getNumber()
fmt.Println(secretNumber)
secretfunc(secretNumber)
}
二.在线词典
1. 抓包
在输入框中输入然后获取post
2. 代码生成
根据视频中老师的方法获取代码(需要翻墙) curlconverter.com/
3. 生成 request body
为了能够灵活输入编写结构体代码
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
用结构体数据代替刚开始的data数据
request := DictRequest{TransType: "en2zh", Source: "food"}
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
4. 解析 response body
因为golang需要写一个结构体获取数据用网站oktools.net/json2go 生成结构体
然后用下面代码代替bodytext的输出,可以看到所有的数据
var DictResponse DictResponse
err = json.Unmarshal(bodyText, &DictResponse)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v", DictResponse)
5. 打印结果
只输出单词和单词的音标和含义
fmt.Println(word, "UK:", DictResponse.Dictionary.Prons.En, "US:", DictResponse.Dictionary.Prons.EnUs)
for _, item := range DictResponse.Dictionary.Explanations {
fmt.Println(item)
}
6. 完善代码
让用户能够翻译自己输入的单词,外面添for循环只有当用户输入“111”时终止循环代码结束
word := "hello"
fmt.Println("如果输入111终止程序")
fmt.Println("请输入单词")
fmt.Scanln(&word)
for word != "111" {
fmt.Println(word, "UK:", DictResponse.Dictionary.Prons.En, "US:", DictResponse.Dictionary.Prons.EnUs)
for _, item := range DictResponse.Dictionary.Explanations {
fmt.Println(item)
}
fmt.Println("请输入单词")
fmt.Scanln(&word)
}