🔧 工具函数
安装器内部使用的通用辅助函数——平台名、架构名、sudo 可用性、安装路径校验。它们多为公开导出,方便调用方做同样的诊断与校验。
包路径:github.com/scagogogo/composer-skills/pkg/installer
函数清单
GetPlatformName
返回当前操作系统名(runtime.GOOS)。
GetArchName
返回当前 CPU 架构名(runtime.GOARCH)。
CanUseSudo
检查系统是否可用 sudo。
ValidateInstallPath
校验安装路径非空。
GetPlatformName
返回当前操作系统名称。
func GetPlatformName() string等价于 runtime.GOOS,返回值如 linux、darwin、windows、freebsd 等。用于日志、诊断报告或决定走哪条安装分支。
fmt.Println(installer.GetPlatformName()) // 例如: linuxGetArchName
返回当前 CPU 架构名称。
func GetArchName() string等价于 runtime.GOARCH,返回值如 amd64、arm64、386 等。当前 installer 包本身不按架构区分行为,此函数主要供诊断与日志使用。
fmt.Println(installer.GetArchName()) // 例如: arm64CanUseSudo
检查系统上是否可以使用 sudo 命令。
func CanUseSudo() bool实现为 exec.LookPath("sudo") == nil,即 sudo 是否在 PATH 中。仅判断存在性,不验证当前用户是否有免密 sudo 权限。
if installer.CanUseSudo() {
cfg.UseSudo = true
}配合 Config.UseSudo
在动态决定是否启用 sudo 时很有用:先 CanUseSudo() 探测,再据此设置 Config.UseSudo,避免在无 sudo 的容器里硬开 sudo 导致命令失败。
ValidateInstallPath
校验安装路径是否可用。
func ValidateInstallPath(path string) error当前实现仅检查路径非空(空时返回 安装路径不能为空)。这是最基础的校验,调用方可在其基础上叠加更严格的检查(如可写性、是否已存在等)。
if err := installer.ValidateInstallPath(cfg.InstallPath); err != nil {
log.Fatal(err)
}当前校验较宽松
ValidateInstallPath 不会检查路径是否存在、是否可写、是否是绝对路径。如需更强校验,建议结合 composerutils.CheckWritePermission 与 composerutils.EnsureDirectoryExists 使用。
内部辅助函数(非公开)
以下函数未被导出,但理解它们有助于阅读安装器源码:
| 函数 | 作用 |
|---|---|
findBinary(name) | 在 PATH 中查找可执行文件,等价 exec.LookPath |
findCommand(name, args...) | 创建 exec.Cmd,等价 exec.Command |
runPkgCommand(useSudo, args...) | 运行包管理器命令,useSudo=true 时前缀 sudo |
downloadComposerPhar(url, dest, cfg) | 用 curl -fsSL -o 下载 phar |
createComposerWrapper(phar, installPath, useSudo) | 生成 composer(sh) 或 composer.bat 包装脚本 |
writeFile(path, content, useSudo) | 写文件,useSudo 时用 sudo tee |
快速示例
系统环境诊断
package main
import (
"fmt"
"github.com/scagogogo/composer-skills/pkg/installer"
)
func main() {
fmt.Println("平台:", installer.GetPlatformName())
fmt.Println("架构:", installer.GetArchName())
fmt.Println("可用 sudo:", installer.CanUseSudo())
}动态构建配置
package main
import (
"log"
"github.com/scagogogo/composer-skills/pkg/installer"
)
func main() {
cfg := installer.DefaultConfig()
// 路径非空校验
if err := installer.ValidateInstallPath(cfg.InstallPath); err != nil {
log.Fatal(err)
}
// 容器里可能没有 sudo,按可用性决定
cfg.UseSudo = installer.CanUseSudo()
_ = installer.NewInstaller(cfg)
}进阶
- GetSystemInfo 的关系:
GetSystemInfo返回的 map 里,平台与架构信息会通过类似方式收集;若要完整的「一键诊断」快照,优先用GetSystemInfo()而非逐个调用本页函数。 - 跨平台一致性:
GetPlatformName/GetArchName在所有 OS 上行为一致,CanUseSudo在 Windows 上恒为false(Windows 无 sudo)。 - 未来扩展:
ValidateInstallPath当前是占位实现,后续可扩展为检查绝对路径、可写性、是否冲突已有文件等;调用方不应依赖「只校验非空」这一当前行为,应将其视为「至少做了非空校验」的保证。