Browse Tag: 语法

Go 标准库介绍四: path

本文介绍Go 标准库: path, filepath 常用导出函数,结构体及方法

1. path 包

path实现了对斜杠分隔的路径进行操作的函数。

  • func IsAbs(path string) bool // 判断是否是一个绝对路径
  • func Split(path string) (dir, file string) // 将路径分割为路径和文件名
  • func Join(elem ...string) string // 将多个字符串合并为一个路径
  • func Ext(path string) string // 返回路径中扩展部分
  • func Base(path string) string // 返回路径的最后一个元素
  • func Dir(path string) string // 返回路径中目录部分
  • func Clean(path string) string // 返回同目录的最短路径
  • func Match(pattern, name string) (matched bool, err error) // 正则是否匹配路径(shell 文件名匹配)

$GOPATH/src/github.com/ironxu/go_note/library/path/path.go 代码如下:

2. path/filepath 包

filepath 包实现了兼容各操作系统的文件路径操作函数。

  • filepath.Separator // 预定义变量,表示路径分隔符 /
  • filepath.ListSeparator // 预定义变量,表示环境变量分隔符 :
  • func Abs(path string) (string, error) // 返回path 相对当前路径的绝对路径
  • func Clean(path string) string // 返回path 的最短路径
  • func Rel(basepath, targpath string) (string, error) // 返回targpath 相对 basepath路径
  • func EvalSymlinks(path string) (string, error) // 返回软链指向的路径
  • func VolumeName(path string) string // 返回路径最前面的卷名
  • func ToSlash(path string) string // 路径分隔符替换为 /
  • func FromSlash(path string) string // / 替换为路径分隔符
  • func SplitList(path string) []string // 分隔环境变量里面的路径
  • func Walk(root string, walkFn WalkFunc) error // 遍历 root 目录下的文件树,并调用 walkFn

$GOPATH/src/github.com/ironxu/go_note/library/path/filepath.go 代码如下:

参考

可以关注我的微博了解更多信息: @刚刚小码农

Go 标准库介绍三: os

介绍Go 标准库 os 常用导出函数,结构体及其方法。

os 包提供了不依赖平台的操作系统函数接口。错误处理设计为go 风格,失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。

1. os 常用导出函数

  • func Hostname() (name string, err error) // Hostname返回内核提供的主机名
  • func Environ() []string // Environ返回表示环境变量的格式为”key=value”的字符串的切片拷贝
  • func Getenv(key string) string // Getenv检索并返回名为key的环境变量的值
  • func Getpid() int // Getpid返回调用者所在进程的进程ID
  • func Exit(code int) // Exit让当前程序以给出的状态码code退出。一般来说,状态码0表示成功,非0表示出错。程序会立刻终止,defer的函数不会被执行
  • func Stat(name string) (fi FileInfo, err error) // 获取文件信息
  • func Getwd() (dir string, err error) // Getwd返回一个对应当前工作目录的根路径
  • func Mkdir(name string, perm FileMode) error // 使用指定的权限和名称创建一个目录
  • func MkdirAll(path string, perm FileMode) error // 使用指定的权限和名称创建一个目录,包括任何必要的上级目录,并返回nil,否则返回错误
  • func Remove(name string) error // 删除name指定的文件或目录
  • func TempDir() string // 返回一个用于保管临时文件的默认目录
  • var Args []string Args保管了命令行参数,第一个是程序名。

$GOPATH/src/github.com/ironxu/go_note/library/os/os.go 源码如下:

2. File 结构体

  • func Create(name string) (file *File, err error) // Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
  • func Open(name string) (file *File, err error) // Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式
  • func (f *File) Stat() (fi FileInfo, err error) // Stat返回描述文件f的FileInfo类型值
  • func (f *File) Readdir(n int) (fi []FileInfo, err error) // Readdir读取目录f的内容,返回一个有n个成员的[]FileInfo,这些FileInfo是被Lstat返回的,采用目录顺序
  • func (f *File) Read(b []byte) (n int, err error) // Read方法从f中读取最多len(b)字节数据并写入b
  • func (f *File) WriteString(s string) (ret int, err error) // 向文件中写入字符串
  • func (f *File) Sync() (err error) // Sync递交文件的当前内容进行稳定的存储。一般来说,这表示将文件系统的最近写入的数据在内存中的拷贝刷新到硬盘中稳定保存
  • func (f *File) Close() error // Close关闭文件f,使文件不能用于读写

$GOPATH/src/github.com/ironxu/go_note/library/os/file.go 源码如下:

3. FileInfo 结构体

FileInfo用来描述一个文件对象

结构体定义:

  • func Stat(name string) (fi FileInfo, err error) // Stat 返回描述文件的FileInfo。如果指定的文件对象是一个符号链接,返回的FileInfo描述该符号链接指向的文件的信息,本函数会尝试跳转该链接
  • func Lstat(name string) (fi FileInfo, err error) // Lstat 返回描述文件对象的FileInfo。如果指定的文件对象是一个符号链接,返回的FileInfo描述该符号链接的信息,本函数不会试图跳转该链接。

使用示例:

参考

可以关注我的微博了解更多信息: @刚刚小码农

Go 标准库介绍二: time

介绍Go 标准库 time 常用导出函数,结构体及其方法。

time包提供显示和计算时间用的函数。

1. 时间处理类型

Go 中时间处理依赖的数据类型: time.Time, time.Month, time.Weekday, time.Duration, time.Location

1.1 time.Time 时间点

time.Time 代表一个纳秒精度的时间点.

/usr/local/go/src/time/time.go 定义如下:

时间变量标识一个具体的时间点,演示如下:

代码中应使用time.Time 类型值来保存和传递时间,而不能用指针。表示时间的变量和字段,应为time.Time类型,而不是*time.Time类型。

每一个时间点都具有时区信息,当计算时间的表示格式时,如FormatHourYear等方法,都会考虑该信息。LocalUTCIn方法返回一个指定时区(但指向同一时间点)的Time。修改时区信息只是会改变其表示,不会修改被表示的时间点。

1.2 time.Month 月份

time.Month 代表一年中的某个月

/usr/local/go/src/time/time.go 定义如下:

和月份相关的常量如下:

1.3 time.Weekday 星期

time.Weekday 代表一周的周几。

/usr/local/go/src/time/time.go 定义如下:

和星期相关的常量:

1.4 time.Duration 时间段

time.Duration 类型代表两个时间点之间经过的纳秒数,可表示的最长时间段约为290年。

/usr/local/go/src/time/time.go 定义如下:

涉及常量如下:

1.5 time.Location 时区

Location代表一个地点,以及该地点所在的时区信息。北京时间可以使用 Asia/Shanghai

/usr/local/go/src/time/zoneinfo.go 中定义:

预定义时区变量:

2. time.Time 方法

介绍 time.Time 接受者的方法:获取时间点,获取时间相关信息,时间比较,计算和序列化操作。

示例代码文件: $GOPATH/src/github.com/ironxu/go_note/library/time/time.go

2.1 获取一个时间的方法

  • func Now() Time {} // 当前本地时间
  • func Unix(sec int64, nsec int64) Time {} // 根据时间戳返回本地时间
  • func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time {} // 返回指定时间

2.2 时间显示

  • func (t Time) UTC() Time {} // 获取指定时间在UTC 时区的时间表示
  • func (t Time) Local() Time {} // 以本地时区表示
  • func (t Time) In(loc *Location) Time {} // 时间在指定时区的表示
  • func (t Time) Format(layout string) string {} // 按指定格式显示时间

2.3 获取日期信息

  • func (t Time) Date() (year int, month Month, day int) {} // 返回时间的日期信息
  • func (t Time) Year() int {} // 返回年
  • func (t Time) Month() Month {} // 月
  • func (t Time) Day() int {} // 日
  • func (t Time) Weekday() Weekday {} // 星期
  • func (t Time) ISOWeek() (year, week int) {} // 返回年,星期范围编号
  • func (t Time) Clock() (hour, min, sec int) {} // 返回时间的时分秒
  • func (t Time) Hour() int {} // 返回小时
  • func (t Time) Minute() int {} // 分钟
  • func (t Time) Second() int {} // 秒
  • func (t Time) Nanosecond() int {} // 纳秒
  • func (t Time) YearDay() int {} // 一年中对应的天
  • func (t Time) Location() *Location {} // 时间的时区
  • func (t Time) Zone() (name string, offset int) {} // 时间所在时区的规范名和想对UTC 时间偏移量
  • func (t Time) Unix() int64 {} // 时间转为时间戳
  • func (t Time) UnixNano() int64 {} // 时间转为时间戳(纳秒)

2.4 时间比较与计算

  • func (t Time) IsZero() bool {} // 是否是零时时间
  • func (t Time) After(u Time) bool {} // 时间在u 之前
  • func (t Time) Before(u Time) bool {} // 时间在u 之后
  • func (t Time) Equal(u Time) bool {} // 时间与u 相同
  • func (t Time) Add(d Duration) Time {} // 返回t +d 的时间点
  • func (t Time) Sub(u Time) Duration {} // 返回 t-u
  • func (t Time) AddDate(years int, months int, days int) Time {} 返回增加了给出的年份、月份和天数的时间点Time

2.6 时间序列化

  • func (t Time) MarshalBinary() ([]byte, error) {} // 时间序列化
  • func (t Time) UnmarshalBinary(data []byte) error {} // 反序列化
  • func (t Time) MarshalJSON() ([]byte, error) {} // 时间序列化
  • func (t Time) MarshalText() ([]byte, error) {} // 时间序列化
  • func (t Time) GobEncode() ([]byte, error) {} // 时间序列化
  • func (t Time) GobDecode() ([]byte, error) {} // 时间序列化

3. time.Duration 方法

介绍 time.Duration 时间段接受者的方法:输出和改变时间段单位。

  • func (d Duration) String() string // 格式化输出 Duration
  • func (d Duration) Nanoseconds() int64 // 将时间段表示为纳秒
  • func (d Duration) Seconds() float64 // 将时间段表示为秒
  • func (d Duration) Minutes() float64 // 将时间段表示为分钟
  • func (d Duration) Hours() float64 // 将时间段表示为小时

4. time.Location 方法

time.Location 时区的导出函数

  • func (l *Location) String() string // 输出时区名
  • func FixedZone(name string, offset int) *Location // FixedZone 使用给定的地点名name和时间偏移量offset(单位秒)创建并返回一个Location
  • func LoadLocation(name string) (*Location, error) // LoadLocation 使用给定的名字创建Location

5. 其他方法

  • func Sleep(d Duration) // Sleep阻塞当前go程至少d代表的时间段。d<=0时,Sleep会立刻返回

参考资料

可以关注我的微博了解更多信息: @刚刚小码农