建模网站,wordpress 改地址,成都业务网络推广平台,视频网站建设技术方案文章目录 一、Golang条件编译1. 构建标签( Build tags)2. 文件后缀#xff08;File suffixes#xff09; 二、GO golang 获取磁盘空间 条件编译思路 三、【推荐】使用github.com/shirou/gopsutil/disk这个库#xff0c;如何获取机器下不同磁盘分区的内容 一、Golang条件编译… 文章目录 一、Golang条件编译1. 构建标签( Build tags)2. 文件后缀File suffixes 二、GO golang 获取磁盘空间 条件编译思路 三、【推荐】使用github.com/shirou/gopsutil/disk这个库如何获取机器下不同磁盘分区的内容 一、Golang条件编译
在实际的项目开发中我们可能需要根据运行环境的不同来编译不同的文件.
Golang 支持两种条件编译方式
构建标签( Build tags)文件后缀File suffixes
两者可以结合起来使用。
1. 构建标签( Build tags)
Go使用 go/build包 中定义的标签系统system of tags和命名约定naming convention以及go tool中的相应支持来允许Go包编译特定代码。
说简单的就是通过约定好的规定在执行go build 选择性地包含或排除代码的机制。
注意go1.17 过后条件编译的写法和之前有些不同需要注意一下。 当Go编译一个包时它会分析包内的每个源码文件并查找构建标签。标签决定了这个源码文件是否被编译。条件编译的最小单元是以 文件 来进行的。 构建约束以一行build开始的注释。在build之后列出了一些条件在这些条件成立时该文件应包含在编译的包中 约束可以出现在任何源文件中不限于go文件 build必须出现在package语句之前build注释之后应要有一个空行否则不会生效。
2. 文件后缀File suffixes
这种方案比构造标签方案更简单。
如果文件名包含_KaTeX parse error: Expected group after _ at position 49: …台会忽略这个文件。另一种约定是_̲GOARCH.go。这两种后缀可以组合起来但要保证顺序正确的格式是_KaTeX parse error: Expected group after _ at position 5: GOOS_̲GOARCH.go错误的格式是_KaTeX parse error: Expected group after _ at position 7: GOARCH_̲GOOS.go。
如果使用的是 goland 当在 windows 上面新建文件名为 xxxx_linux.go时goland 会自动提示 tag_linux.go is ignored by the build tool because of the OS mismatch。
二、GO golang 获取磁盘空间 条件编译
GO golang 获取磁盘空间 条件编译 参考URL: https://www.jianshu.com/p/f3d31f84d95d
思路
思路 根据不同的操作系统创建不同的文件并使用条件编译指令来选择相应的文件进行编译
首先创建 disc_space_linux.go 文件用于 Linux 系统的实现 获取磁盘占用情况(Linux/Mac下有效)
import (syscall
)type DiskStatus struct {All uint64 json:allUsed uint64 json:usedFree uint64 json:free
}// disk usage of path/disk
func DiskUsage(path string) (disk DiskStatus) {fs : syscall.Statfs_t{}err : syscall.Statfs(path, fs)if err ! nil {return}disk.All fs.Blocks * uint64(fs.Bsize)disk.Free fs.Bfree * uint64(fs.Bsize)disk.Used disk.All - disk.Freereturn
}然后创建 disc_space_windows.go 文件用于 Windows 系统的实现 windows好像不用判断某个目录占用和剩余空间大小直接判断这个目录所在的盘符占用空间多少剩余空间多少就行。
package utilsimport unsafe
import (golang.org/x/sys/windows
)type DiskStatus struct {All uint64Used uint64Free uint64
}func DiskUsage(path string) (disk DiskStatus) {h : windows.MustLoadDLL(kernel32.dll)c : h.MustFindProc(GetDiskFreeSpaceExW)lpFreeBytesAvailable : uint64(0)lpTotalNumberOfBytes : uint64(0)lpTotalNumberOfFreeBytes : uint64(0)r1, r2, err : c.Call(uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(C:))),uintptr(unsafe.Pointer(lpFreeBytesAvailable)),uintptr(unsafe.Pointer(lpTotalNumberOfBytes)),uintptr(unsafe.Pointer(lpTotalNumberOfFreeBytes)))disk.All lpTotalNumberOfBytesdisk.Free lpTotalNumberOfFreeBytesdisk.Used lpFreeBytesAvailablereturn
}在这个示例中根据不同的操作系统分别创建了 disc_space_linux.go 和 disc_space_windows.go 两个文件并使用条件编译指令来选择相应的文件进行编译。
三、【推荐】使用github.com/shirou/gopsutil/disk这个库如何获取机器下不同磁盘分区的内容
https://github.com/shirou/gopsutil
Go中获取磁盘空间信息你可以使用第三方库 github.com/shirou/gopsutil/disk 这个库提供了一个跨平台的方法来获取磁盘的使用情况。
gopstuil就是go语言版的psutilpstuil字面意思是进程和系统实用程序。
gopsutil的挑战在于将pstuil上的函数移植到不同的架构上。所有的通过将C结构体移植到Go结构体来实现没有cgo。目前支持的架构
FreeBSD i386/amd64/armLinux i386/amd64/arm(raspberry pi)Windows i386/amd64/arm/arm64Darwin amd64/arm64OpenBSD amd64Solaris amd64 总结gopsutil 是一个跨平台的库提供了许多系统和硬件信息的获取方法包括磁盘使用情况。 func getDiskUsage(path string) (uint64, uint64, error) {//disk.Usage() 函数来获取指定路径的磁盘使用情况usage, err : disk.Usage(path)if err ! nil {return 0, 0, err}usedSpace : usage.UsedfreeSpace : usage.Freereturn usedSpace, freeSpace, nil
}