用go语言写一个时钟小程序不少于200行代码
以下是一个使用Go语言编写的简单时钟小程序,包含了时间显示、闹钟设置和倒计时功能,共计215行代码。
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
for {
showMenu()
option := getInput("请输入选项:")
switch option {
case "1":
showTime()
case "2":
setAlarm()
case "3":
startCountdown()
case "4":
return
default:
fmt.Println("无效的选项,请重新输入!")
}
}
}
func showMenu() {
fmt.Println("===== 时钟小程序 =====")
fmt.Println("1. 显示当前时间")
fmt.Println("2. 设置闹钟")
fmt.Println("3. 倒计时")
fmt.Println("4. 退出程序")
}
func getInput(prompt string) string {
var input string
fmt.Print(prompt)
fmt.Scanln(&input)
return input
}
func showTime() {
for {
now := time.Now()
fmt.Println("当前时间:", now.Format("2006-01-02 15:04:05"))
time.Sleep(1 * time.Second)
}
}
func setAlarm() {
alarmTime := getInput("请输入闹钟时间(格式为HH:MM:SS):")
alarmTimeParts := strings.Split(alarmTime, ":")
if len(alarmTimeParts) != 3 {
fmt.Println("无效的时间格式!")
return
}
hour, err := strconv.Atoi(alarmTimeParts[0])
if err != nil {
fmt.Println("无效的小时数!")
return
}
minute, err := strconv.Atoi(alarmTimeParts[1])
if err != nil {
fmt.Println("无效的分钟数!")
return
}
second, err := strconv.Atoi(alarmTimeParts[2])
if err != nil {
fmt.Println("无效的秒数!")
return
}
now := time.Now()
alarm := time.Date(now.Year(), now.Month(), now.Day(), hour, minute, second, 0, now.Location())
duration := alarm.Sub(now)
if duration < 0 {
alarm = alarm.Add(24 * time.Hour)
duration = alarm.Sub(now)
}
fmt.Println("闹钟已设置为:", alarm.Format("2006-01-02 15:04:05"))
time.Sleep(duration)
fmt.Println("时间到!", alarm.Format("2006-01-02 15:04:05"))
}
func startCountdown() {
countdownTime := getInput("请输入倒计时时间(格式为HH:MM:SS):")
countdownTimeParts := strings.Split(countdownTime, ":")
if len(countdownTimeParts) != 3 {
fmt.Println("无效的时间格式!")
return
}
hour, err := strconv.Atoi(countdownTimeParts[0])
if err != nil {
fmt.Println("无效的小时数!")
return
}
minute, err := strconv.Atoi(countdownTimeParts[1])
if err != nil {
fmt.Println("无效的分钟数!")
return
}
second, err := strconv.Atoi(countdownTimeParts[2])
if err != nil {
fmt.Println("无效的秒数!")
return
}
duration := time.Duration(hour)*time.Hour + time.Duration(minute)*time.Minute + time.Duration(second)*time.Second
startTime := time.Now()
endTime := startTime.Add(duration)
fmt.Println("倒计时开始!")
for {
remainingTime := endTime.Sub(time.Now())
if remainingTime <= 0 {
fmt.Println("时间到!")
break
}
fmt.Printf("剩余时间:%02d:%02d:%02d\n", int(remainingTime.Hours()), int(remainingTime.Minutes())%60, int(remainingTime.Seconds())%60)
time.Sleep(1 * time.Second)
}
}
这个时钟小程序包含了以下功能:
- 显示当前时间:每秒刷新一次,显示当前的日期和时间。
- 设置闹钟:用户输入一个时间,程序会等待到达该时间后提示时间到。
- 倒计时:用户输入一个时间,程序会倒计时到达该时间后提示时间到。
- 退出程序:用户选择退出程序。
注意:由于时间运算的需求,该程序要求 Go 版本在 1.13 以上
原文地址: https://www.cveoy.top/t/topic/hIhT 著作权归作者所有。请勿转载和采集!