Golang log标准库 Golang
package main
import (
"log"
"os"
)
// log 标准库是一个简单而强大的日志工具,用于记录程序运行过程中的信息。它支持日志输出到控制台、文件等,还可以自定义格式和行为
func main(){
// 基本用法
log.Println("This is a log message")
log.Printf("This is a formatted log: %d", 42)
// log.Fatal("这将记录消息并退出程序") //打印日志后调用 os.Exit(1) 退出程序
// log.Panic("这将记录消息并报异常") //打印日志后调用 panic
// 默认行为
// 默认输出到标准错误(os.Stderr)
// 默认日志格式:时间戳 + 日志内容
// 默认包含日期和时间
// 设置日志前缀
// 使用 log.SetPrefix 添加前缀
log.SetPrefix("[INFO] ")
log.Println("This is an informational message")
// [INFO] 2025/01/13 20:46:02 This is an informational message
// 设置日志标志
// 使用 log.SetFlags 控制日志的时间格式和内容
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
log.Println("This is a detailed log message")
// [INFO] 2025/01/13 20:47:17.910174 8-pkg-log.go:35: This is a detailed log message
// 常用标志:
// log.Ldate: 日期(2025/01/12)。
// log.Ltime: 时间(12:34:56)。
// log.Lmicroseconds: 微秒级时间戳。
// log.Llongfile: 绝对路径和文件名。
// log.Lshortfile: 短文件名和行号。
// log.LUTC: 使用 UTC 时间。
// 日志输出到文件
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Failed to open log file: %s", err)
}
defer file.Close()
log.SetOutput(file)
log.Println("This log will be written to the file")
// 使用自定义 Writer
// var buffer bytes.Buffer
// log.SetOutput(&buffer)
// log.Println("This log is written to a buffer")
// log.Println("Another log message")
// // 打印缓冲区内容
// println(buffer.String())
// 创建自定义日志器
file2, _ := os.OpenFile("app2.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
defer file2.Close()
logger := log.New(file2, "[CUSTOM] ", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("This is a custom log message")
// 记录错误
// err := errors.New("an example error")
// log.Printf("Error occurred: %v", err)
}
标签: Golang标准库
Golang time标准库 Golang
package main
import (
"fmt"
"time"
)
func main(){
// time 是 Go 标准库中一个非常重要的包,用于处理时间相关的操作,如获取当前时间、格式化时间、计算时间间隔、创建定时器等
// 核心类型
// time.Time 表示一个时间点,是time包中最核心的类型
//常用方法
// time.Now():获取当前时间。
// t.Year() / t.Month() / t.Day():获取年、月、日。
// t.Hour() / t.Minute() / t.Second():获取时、分、秒。
// t.Format(layout string):格式化时间。
now := time.Now()
fmt.Println("当前时间",now)
// 获取具体的时间部分
fmt.Printf("年:%d,月:%d,日:%d",now.Year(),now.Month(),now.Day())
fmt.Printf("时:%d,分:%d,秒:%d",now.Hour(),now.Minute(),now.Second())
fmt.Println("格式化时间:",now.Format("2006-01-02 15:04:05"))
// time.Duration 表示两个时间点之间的时间间隔,单位是纳秒
// 常用方法:
// 表示间隔:time.Second, time.Minute, time.Hour 等。
// 运算:可以用加减法计算时间间隔。
// time.Sleep(duration):让程序暂停指定时间。
duration := 2 * time.Second
fmt.Println("等待时间:", duration)
// 程序暂停
time.Sleep(duration)
fmt.Println("等待结束")
// time.Ticker 和 time.Timer
//time.Ticker
//time.Ticker 是一个定时器,用于在固定的时间间隔重复执行操作。
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("执行一次:", time.Now())
}
//time.Timer
//time.Timer 是一个单次触发的定时器
timer := time.NewTimer(2 * time.Second)
fmt.Println("计时开始:", time.Now())
<-timer.C
fmt.Println("计时结束:", time.Now())
// 时间计算
//时间间隔
//可以通过 time.Sub 方法计算两个时间点之间的间隔
start := time.Now()
time.Sleep(2 * time.Second)
end := time.Now()
duration2 := end.Sub(start)
fmt.Println("间隔时间:", duration2)
//时间加减
//通过 Add 或 AddDate 方法可以对时间进行加减
newNow := time.Now();
fmt.Println("当前时间:",newNow)
// 加 6 小时
later := newNow.Add(6 * time.Hour)
fmt.Println("加 6 小时:", later)
// 减 1 天
earlier := newNow.AddDate(0, 0, -1)
fmt.Println("减 1 天:", earlier)
// 时间格式化与解析
//时间格式化
// 通过 time.Format 方法可以将时间转换为字符串。
// 格式说明:
// 年:2006
// 月:01
// 日:02
// 时:15(24小时制) / 03(12小时制)
// 分:04
// 秒:05
// AM/PM:PM
// 常见格式
fmt.Println("默认格式:", now.Format(time.RFC3339))
fmt.Println("自定义格式:", now.Format("2006-01-02 15:04:05"))
fmt.Println("12 小时制:", now.Format("2006-01-02 03:04:05 PM"))
// 时间解析
//通过 time.Parse 方法将字符串转换为时间对象
layout := "2006-01-02 15:04:05"
str := "2025-01-10 14:30:00"
parsedTime, err := time.Parse(layout, str)
if err != nil {
fmt.Println("解析失败:", err)
return
}
fmt.Println("解析时间:", parsedTime)
// 其他常用方法
//判断时间是否在某区间
start = time.Now()
time.Sleep(1 * time.Second)
end = time.Now()
fmt.Println("是否在区间内:", start.Before(end))
//获取时间戳
// 秒级时间戳
fmt.Println("秒级时间戳:", now.Unix())
// 纳秒级时间戳
fmt.Println("纳秒级时间戳:", now.UnixNano())
//常量
// time 包定义了一些常用时间单位的常量:
// time.Second:1 秒
// time.Minute:1 分钟
// time.Hour:1 小时
// time.Microsecond:1 微秒
// time.Millisecond:1 毫秒
fmt.Println(time.Hour) // 1h0m0s
// 总结
// time 包是处理时间的强大工具。学习 time 包时,可以按以下步骤逐步深入:
// 获取当前时间:time.Now()
// 格式化与解析:time.Format 和 time.Parse
// 时间计算:加减操作、间隔计算
// 定时与延迟:time.Sleep, time.Ticker, time.Timer
// 高级功能:如时区转换、时间戳等
}
标签: Golang标准库
Golang Os标准库 Golang
package main
import (
"fmt"
"os"
)
func main(){
// os 标准库提供了操作系统功能的接口,主要用于文件操作、环境变量管理、进程控制等
// 文件操作
//打开文件
// os.Open(name string) (*os.File, error):只读方式打开文件。
// os.OpenFile(name string, flag int, perm FileMode) (*os.File, error):指定模式打开文件
file, err := os.Open("./1-基本语法.go")
if err != nil {
fmt.Println("打开文件失败",err)
return
}
defer file.Close() // 关闭文件
fmt.Println("打开文件成功",file.Name())
//创建文件
//os.Create(name string) (*os.File, error):创建文件(如果已存在,会清空)
file2, err := os.Create("test.txt")
if err != nil{
fmt.Println("创建文件失败",err)
return
}
file2.Close()
fmt.Println("创建文件成功")
//删除文件
//os.Remove(name string) error:删除文件或空目录
err = os.Remove("test.txt")
if err != nil{
fmt.Println("删除文件失败")
return
}
fmt.Println("删除文件成功")
// 目录操作
//创建目录
// os.Mkdir(name string, perm FileMode) error:创建单级目录。
// os.MkdirAll(path string, perm FileMode) error:递归创建多级目录。
err = os.Mkdir("testdir", 0755)
if err != nil {
fmt.Println("目录创建失败:", err)
return
}
fmt.Println("目录创建成功")
//删除目录
// os.Remove(name string) error:删除空目录。
// os.RemoveAll(path string) error:递归删除目录及其内容。
err = os.RemoveAll("testdir")
if err != nil {
fmt.Println("目录删除失败:", err)
return
}
fmt.Println("目录删除成功")
//读取目录内容
//os.ReadDir(name string) ([]os.DirEntry, error):读取目录中的内容
entries, err := os.ReadDir(".")
if err != nil {
fmt.Println("读取目录失败:", err)
return
}
for _, entry := range entries {
fmt.Println(entry.Name())
}
// 环境变量
// 获取环境变量
// os.Getenv(key string) string:获取环境变量的值。
// os.LookupEnv(key string) (string, bool):安全获取环境变量,判断是否存在。
value := os.Getenv("HOME")
fmt.Println("HOME 环境变量:", value)
// 设置环境变量
// os.Setenv(key, value string) error:设置环境变量。
// err := os.Setenv("MY_VAR", "123")
// if err != nil {
// fmt.Println("设置环境变量失败:", err)
// return
// }
// fmt.Println("环境变量设置成功:", os.Getenv("MY_VAR"))
// 删除环境变量
// os.Unsetenv(key string) error:删除环境变量
// err := os.Unsetenv("MY_VAR")
// if err != nil {
// fmt.Println("删除环境变量失败:", err)
// return
// }
// fmt.Println("环境变量已删除")
// 进程操作
//获取当前进程信息
// os.Getpid() int:获取当前进程 ID。
// os.Getppid() int:获取父进程 ID。
fmt.Println("当前进程 ID:", os.Getpid())
fmt.Println("父进程 ID:", os.Getppid())
//退出程序
// fmt.Println("程序开始")
// os.Exit(0)
// fmt.Println("这行不会被执行")
// 获取和设置文件信息
// 获取文件信息
//os.Stat(name string) (os.FileInfo, error):获取文件或目录信息
// info, err := os.Stat("example.txt")
// if err != nil {
// fmt.Println("获取文件信息失败:", err)
// return
// }
// fmt.Println("文件名:", info.Name())
// fmt.Println("文件大小:", info.Size())
// fmt.Println("是否为目录:", info.IsDir())
// 修改文件权限
// os.Chmod(name string, mode FileMode) error:修改文件权限。
// 总结
// os 包主要用于以下功能:
// 文件和目录操作:创建、删除、读取、修改。
// 环境变量管理:获取、设置、删除。
// 进程管理:获取进程信息、退出程序。
// 文件信息:获取文件元信息、修改权限。
}
标签: Golang标准库
Golang Math标准库 Golang
package main
import (
"fmt"
"math"
"math/rand"
"time"
)
func main(){
// Math
// math 标准库提供了常用的数学函数和常量,涵盖浮点运算、三角函数、指数运算、对数运算等,适用于科学计算、工程计算和其他需要数学支持的场景
// 主要功能分类
// 常量
// 提供数学相关的常量,如圆周率、最大/最小值等。
// 基础运算
// 提供平方根、绝对值、幂运算等基本数学运算。
// 三角函数
// 包括正弦、余弦、正切及其反函数。
// 对数与指数
// 包括自然对数、以 10 为底的对数、指数运算等。
// 舍入函数
// 提供向上取整、向下取整、四舍五入等功能。
// 数字和常量
// math.Pi 3.141592653589793 圆周率
// math.E 2.718281828459045 自然常数 e
// math.MaxFloat64 最大的 float64 值
// math.SmallestNonzeroFloat64 最小的非零 float64 值
// math.MaxInt64 最大的 int64 值
// math.MinInt64 最小的 int64 值
fmt.Println("math.Pi",math.Pi)
fmt.Println("math.E",math.E)
fmt.Println("math.MaxFloat64",math.MaxFloat64)
fmt.Println("math.MaxInt64",math.MaxInt64)
// 基础运算
// math.Abs(x) 返回 x 的绝对值 math.Abs(-5.5) → 5.5
// math.Sqrt(x) 返回 x 的平方根 math.Sqrt(16) → 4
// math.Pow(x, y) 返回 x 的 y 次幂 math.Pow(2, 3) → 8
// math.Mod(x, y) 返回 x 除以 y 的余数(浮点数) math.Mod(10, 3) → 1
// math.Ceil(x) 向上取整 math.Ceil(2.3) → 3
// math.Floor(x) 向下取整 math.Floor(2.7) → 2
// math.Round(x) 四舍五入 math.Round(2.5) → 3
// math.Trunc(x) 返回 x 的整数部分(去掉小数) math.Trunc(3.9) → 3
fmt.Println("math.Ceil",math.Ceil(6.5)) // 向上取整
fmt.Println("math.Floor",math.Floor(6.5)) // 向下取整
fmt.Println("math.Round",math.Round(6.5)) // 四舍五入
// 三角函数
// math.Sin(x) 返回 x 的正弦值 math.Sin(math.Pi/2) → 1
// math.Cos(x) 返回 x 的余弦值 math.Cos(math.Pi) → -1
// math.Tan(x) 返回 x 的正切值 math.Tan(math.Pi/4) → 1
// math.Asin(x) 返回 x 的反正弦值(弧度) math.Asin(1) → Pi/2
// math.Acos(x) 返回 x 的反余弦值(弧度) math.Acos(1) → 0
// math.Atan(x) 返回 x 的反正切值(弧度) math.Atan(1) → Pi/4
// 对数与指数
// math.Exp(x) 返回 e^x math.Exp(1) → 2.718281828459045
// math.Log(x) 返回 x 的自然对数 math.Log(math.E) → 1
// math.Log10(x) 返回 x 的以 10 为底的对数 math.Log10(100) → 2
// math.Log2(x) 返回 x 的以 2 为底的对数 math.Log2(8) → 3
// 比较函数
// math.Max(x, y) 返回 x 和 y 中的较大值 math.Max(10, 20) → 20
// math.Min(x, y) 返回 x 和 y 中的较小值 math.Min(10, 20) → 10
var numA float64 = 10
var numB float64 = 20
maxNum := math.Max(numA,numB) // 获取两个中较大值
fmt.Println(maxNum)
// 生成随机数
// 使用当前时间戳作为种子
rand.Seed(time.Now().UnixNano())
// 生成随机整数
fmt.Println("随机整数:", rand.Intn(100))
// 生成随机浮点数
fmt.Println("随机浮点数:", rand.Float64())
}
标签: Golang标准库
1 2