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()
}