随机数+时间格式+读写文件+log日志
package main import ( "bufio" "fmt" "io" "io/ioutil" "log" "math/rand" "os" "path/filepath" "strings" "time" ) func genRand() { source := rand.NewSource(2023) rander := rand.New(source) for i := 0; i < 10; i++ { fmt.Printf("%d", rander.Intn(100)) } fmt.Println() source.Seed(2023) rander2 := rand.New(source) for i := 0; i < 10; i++ { fmt.Printf("%d", rander2.Intn(100)) } fmt.Println() for i := 0; i < 10; i++ { fmt.Printf("%d", rand.Intn(100)) } } func T() { now := time.Now() time_fmt := "2006-01-02 15:04:05" // ts := now.Format(time_fmt) loc, _ := time.LoadLocation("Asia/Shanghai") t0, e := time.ParseInLocation(time_fmt, "2022-08-25 11:10:19", loc) //时刻 fmt.Println(now) // fmt.Println(ts) // fmt.Println(t) // t, e := time.Parse("2006-01-02 15:04:05", ts) if e != nil { fmt.Println("error") } else { // fmt.Println(t.Year(), int(t.Month()), t.Day()) //两个时刻相差多少分钟 t1 := time.Now() d1 := t1.Sub(t0) fmt.Println(d1) d2 := time.Since(t0) fmt.Println(d2) //指定时刻添加1小时 d3 := time.Duration(time.Hour) t3 := t0.Add(d3) fmt.Println(t3.Format(time_fmt)) if t3.After(t0) { fmt.Println("t3晚于t0") } //拿到时刻 转换当前时间戳 fmt.Printf("T3的时间戳 %d %d\n", t3.Unix(), t3.UnixMilli()) //当前时刻是一年的第多少天,当前周几 fmt.Println(t3.YearDay(), int(t3.Weekday())) } // fmt.Println(loc) } //定时器3秒执行 func timer() { tm := time.NewTimer(3 * time.Second) fmt.Println(time.Now().Unix()) <-tm.C fmt.Println(time.Now().Unix()) tm.Stop() fmt.Println(time.Now().Unix()) <-time.After(3 * time.Second) fmt.Println(time.Now().Unix()) tm.Stop() } //反复执行周期性执行 func ticker() { tk := time.NewTicker(1 * time.Second) for i := 0; i < 5; i++ { <-tk.C fmt.Println(time.Now().Unix()) } tk.Stop() } //定时执行 func dingshi() { shi := "202208252000" t, _ := time.Parse("2016010215", shi) n := time.Now() d := t.Sub(n) <-time.After(d) fmt.Println("现在时间是", shi) //执行任务 //go worker() //异步执行 //每隔24小时在运行一次 for { oneDay := time.Duration(24 * time.Hour) <-time.After(oneDay) //执行函数 //go worker() //异步执行 开多线程执行 } } //读二进制文件 func readFileBinary() { fin, err := os.Open("dir/a.txt") if err != nil { fmt.Printf("打开文件失败: %v\n", err) } defer fin.Close() //保证成功打开后 close count := make([]byte, 5) for { n, err := fin.Read(count) //n表示成功读取的字节数 if err != nil { if err == io.EOF { if n > 0 { fmt.Println(count[:n]) } break //读到文件末尾退出 } else { fmt.Printf("读文件失败:%v\n", err) } } else { fmt.Println(count[:n]) //可能读不出5个所以展示n前。 } } fin.Close() } //读文件文件 func readFileText() { fin, err := os.Open("dir/a.txt") if err != nil { fmt.Printf("打开文件失败: %v\n", err) } defer fin.Close() //保证成功打开后 close reader := bufio.NewReader(fin) for { line, err := reader.ReadString('\n') if err != nil { if err == io.EOF { break } else { fmt.Printf("读文件失败:%v\n", err) } } else { line = strings.TrimRight(line, "\n") fmt.Println(line) } } } //写文件 func writeFile() { f, err := os.OpenFile("dir/b.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0777) if err != nil { fmt.Println("打开文件失败", err) } defer f.Close() writer := bufio.NewWriter(f) writer.WriteString("a\n") writer.WriteString("b\n") writer.WriteString("c\n") writer.Flush() } //递归遍历目录 func walk(path string) { subDirs, err := ioutil.ReadDir(path) //subDirs->path子目录 if err != nil { return } for _, dir := range subDirs { if dir.IsDir() { walk(filepath.Join(path, dir.Name())) //递归拼接目录 } else { if strings.HasSuffix(dir.Name(), ".txt") { //HasSuffix以.txt结尾 fmt.Println(dir.Name()) } } } } //打印日志 func lg() { f, err := os.OpenFile("dir/biz.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0777) if err != nil { fmt.Println("打开文件失败", err) } defer f.Close() logger := log.New(f, "web ", log.Ldate|log.Lmicroseconds) logger.Println("一行") logger.Println("一行") logger.Println("又一行") } func main() { // lg() // walk("dir") // writeFile() // readFileText() // readFileBinary() // dingshi() // ticker() // timer() // T() // genRand() }