Skip to content

🔧 工具函数

安装器内部使用的通用辅助函数——平台名、架构名、sudo 可用性、安装路径校验。它们多为公开导出,方便调用方做同样的诊断与校验。

包路径:github.com/scagogogo/composer-skills/pkg/installer

函数清单

💻

GetPlatformName

返回当前操作系统名(runtime.GOOS)。

🏗️

GetArchName

返回当前 CPU 架构名(runtime.GOARCH)。

🔒

CanUseSudo

检查系统是否可用 sudo。

📁

ValidateInstallPath

校验安装路径非空。

GetPlatformName

返回当前操作系统名称。

go
func GetPlatformName() string

等价于 runtime.GOOS,返回值如 linuxdarwinwindowsfreebsd 等。用于日志、诊断报告或决定走哪条安装分支。

go
fmt.Println(installer.GetPlatformName()) // 例如: linux

GetArchName

返回当前 CPU 架构名称。

go
func GetArchName() string

等价于 runtime.GOARCH,返回值如 amd64arm64386 等。当前 installer 包本身不按架构区分行为,此函数主要供诊断与日志使用。

go
fmt.Println(installer.GetArchName()) // 例如: arm64

CanUseSudo

检查系统上是否可以使用 sudo 命令。

go
func CanUseSudo() bool

实现为 exec.LookPath("sudo") == nil,即 sudo 是否在 PATH 中。仅判断存在性,不验证当前用户是否有免密 sudo 权限。

go
if installer.CanUseSudo() {
    cfg.UseSudo = true
}

配合 Config.UseSudo

在动态决定是否启用 sudo 时很有用:先 CanUseSudo() 探测,再据此设置 Config.UseSudo,避免在无 sudo 的容器里硬开 sudo 导致命令失败。

ValidateInstallPath

校验安装路径是否可用。

go
func ValidateInstallPath(path string) error

当前实现仅检查路径非空(空时返回 安装路径不能为空)。这是最基础的校验,调用方可在其基础上叠加更严格的检查(如可写性、是否已存在等)。

go
if err := installer.ValidateInstallPath(cfg.InstallPath); err != nil {
    log.Fatal(err)
}

当前校验较宽松

ValidateInstallPath 不会检查路径是否存在、是否可写、是否是绝对路径。如需更强校验,建议结合 composerutils.CheckWritePermissioncomposerutils.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

快速示例

系统环境诊断

go
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())
}

动态构建配置

go
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 当前是占位实现,后续可扩展为检查绝对路径、可写性、是否冲突已有文件等;调用方不应依赖「只校验非空」这一当前行为,应将其视为「至少做了非空校验」的保证。

基于 MIT 许可证发布