1.与时间相关的函数
获取当前时间
package main import ( "fmt" "time" ) func main() { currentTime := time.Now() fmt.Println("Current Time:", currentTime) }
// 输出 Current Time: 2025-02-05 15:04:05.123456789 +0800 CST m=+0.000000001
时间格式化
Go 使用 特定格式字符串 来格式化时间,不是传统的 YYYY-MM-DD
,而是使用固定的时间参考值:
Mon Jan 2 15:04:05 MST 2006
要记住这个值,可以用日期 2006-01-02 15:04:05 来帮助理解
package main import ( "fmt" "time" ) func main() { currentTime := time.Now() // 格式化为 YYYY-MM-DD HH:MM:SS formattedTime := currentTime.Format("2006-01-02 15:04:05") fmt.Println("Formatted Time:", formattedTime) // 格式化为 DD/MM/YYYY formattedDate := currentTime.Format("02/01/2006") fmt.Println("Formatted Date:", formattedDate) }
// 输出 Formatted Time: 2025-02-05 14:30:45 Formatted Date: 05/02/2025
时间解析
package main import ( "fmt" "time" ) func main() { layout := "2006-01-02 15:04:05" str := "2025-02-05 12:30:00" parsedTime, err := time.Parse(layout, str) if err != nil { fmt.Println("Error parsing time:", err) return } fmt.Println("Parsed Time:", parsedTime) }
// 输出 Parsed Time: 2025-02-05 12:30:00 +0000 UTC
时间的加减
package main import ( "fmt" "time" ) func main() { currentTime := time.Now() // 增加 10 分钟 futureTime := currentTime.Add(10 * time.Minute) fmt.Println("Current Time:", currentTime) fmt.Println("10 minutes later:", futureTime) // 减少 1 小时 pastTime := currentTime.Add(-1 * time.Hour) fmt.Println("1 hour ago:", pastTime) }
计算时间差
package main import ( "fmt" "time" ) func main() { t1 := time.Now() t2 := t1.Add(2 * time.Hour) duration := t2.Sub(t1) fmt.Println("Time difference:", duration) }
// 输出 Time difference: 2h0m0s
定时器和延时
// 暂停当前程序 2 秒 time.Sleep(2 * time.Second)
// 返回一个通道,指定时间后向通道发送一个值 package main import ( "fmt" "time" ) func main() { fmt.Println("Waiting for 3 seconds...") <-time.After(3 * time.Second) // 等待 3 秒 fmt.Println("Done waiting!") }
获取时间戳
package main import ( "fmt" "time" ) func main() { currentTime := time.Now() // 秒级时间戳 fmt.Println("Unix Timestamp (seconds):", currentTime.Unix()) // 毫秒级时间戳 fmt.Println("Unix Timestamp (milliseconds):", currentTime.UnixNano()/1e6) // 纳秒级时间戳 fmt.Println("Unix Timestamp (nanoseconds):", currentTime.UnixNano()) }
定时任务(time.Ticker)
package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(1 * time.Second) done := make(chan bool) go func() { for { select { case t := <-ticker.C: fmt.Println("Tick at", t) case <-done: return } } }() time.Sleep(5 * time.Second) ticker.Stop() // 停止定时器 done <- true fmt.Println("Ticker stopped") }
定义时间间隔
package main import ( "fmt" "time" ) func main() { duration := 2 * time.Hour + 30 * time.Minute fmt.Println("Duration:", duration) // 加到当前时间 newTime := time.Now().Add(duration) fmt.Println("New Time:", newTime) }
时区操作
package main import ( "fmt" "time" ) func main() { loc, err := time.LoadLocation("America/New_York") if err != nil { fmt.Println("Error loading location:", err) return } timeInNY := time.Now().In(loc) fmt.Println("Time in New York:", timeInNY) }
时间比较
package main import ( "fmt" "time" ) func main() { t1 := time.Now() t2 := t1.Add(10 * time.Minute) fmt.Println("t1 before t2:", t1.Before(t2)) fmt.Println("t1 after t2:", t1.After(t2)) fmt.Println("t1 equals t2:", t1.Equal(t2)) }
2.读写文件
文件的打开和关闭
file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() // 确保文件在操作完成后关闭
创建文件
file, err := os.Create("newfile.txt") if err != nil { log.Fatal(err) } defer file.Close()
文件读取
# 1. 读取整个文件内容 content, err := os.ReadFile("example.txt") if err != nil { log.Fatal(err) } fmt.Println(string(content)) // 将字节切片转换成字符串 # 1. 逐行读取文件 file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) // 输出每一行 } if err := scanner.Err(); err != nil { log.Fatal(err) }
文件写入
# 1. 写入字符串 file, err := os.Create("output.txt") if err != nil { log.Fatal(err) } defer file.Close() _, err = file.WriteString("Hello, World!\n") if err != nil { log.Fatal(err) } # 2. 附加写入 file, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0600) if err != nil { log.Fatal(err) } defer file.Close() _, err = file.WriteString("Append this line.\n") if err != nil { log.Fatal(err) }
文件操作常用模式
常量 | 模式 |
os.O_RDONLY | 只读模式 |
os.O_WRONLY | 只写模式 |
os.O_RDWR | 读写模式 |
os.O_CREATE | 如果文件不存在,则创建文件 |
os.O_TRUNC | 如果文件已存在,打开文件并清空文件内容 |
os.O_APPEND | 追加模式 |
删除文件
err := os.Remove("example.txt") if err != nil { log.Fatal(err) }
查看文件是否存在
_, err := os.Stat("example.txt") if os.IsNotExist(err) { fmt.Println("File does not exist") } else if err != nil { log.Fatal(err) }