# 任务09:平台适配接口定义 ## 任务描述 定义平台适配接口,用于处理不同操作系统和架构的特定逻辑。平台适配接口将抽象平台差异,为构建过程提供统一的平台操作接口,使得安装包构建能够适应不同的目标平台。 ## 实现步骤 1. 定义平台信息结构: - 在`internal/platform`包中创建`platform.go`文件 - 定义PlatformInfo结构体,包含平台特定信息: ```go type PlatformInfo struct { Name string // 平台名称 (windows, linux) Version string // 平台版本 Arch string // 平台架构 (amd64, arm64) DefaultInstallDir string // 默认安装目录 PathSeparator string // 路径分隔符 ExecutableExt string // 可执行文件扩展名 DynamicLibExt string // 动态库扩展名 StaticLibExt string // 静态库扩展名 ScriptExt map[string]string // 脚本扩展名映射 } ``` 2. 定义平台适配器接口: - 创建PlatformAdapter接口,定义平台操作方法: ```go type PlatformAdapter interface { // GetPlatformInfo 获取平台信息 GetPlatformInfo() PlatformInfo // PrepareEnvironment 准备构建环境 PrepareEnvironment(config *config.Config, target config.Target) error // CleanupEnvironment 清理构建环境 CleanupEnvironment(config *config.Config, target config.Target) error // GetDefaultInstallDir 获取默认安装目录 GetDefaultInstallDir(appName string) string // NormalizePath 规范化路径 NormalizePath(path string) string // IsPathAbsolute 判断路径是否为绝对路径 IsPathAbsolute(path string) bool // JoinPaths 连接路径 JoinPaths(elem ...string) string // GetTempDir 获取临时目录 GetTempDir() string // GetOSEnv 获取操作系统环境变量 GetOSEnv(name string) string // SetFilePermissions 设置文件权限 SetFilePermissions(path string, perm string) error } ``` 3. 定义平台常量: - 创建平台相关的常量定义: ```go const ( // 平台名称 PlatformWindows = "windows" PlatformLinux = "linux" PlatformMacOS = "macos" // 架构名称 ArchAMD64 = "amd64" ArchARM64 = "arm64" ArchX86 = "386" ArchARM = "arm" ) ``` 4. 定义平台工厂接口: - 创建PlatformAdapterFactory接口,用于创建平台适配器: ```go type PlatformAdapterFactory interface { // CreateAdapter 创建平台适配器 CreateAdapter(platform string, arch string) (PlatformAdapter, error) // GetSupportedPlatforms 获取支持的平台 GetSupportedPlatforms() []string // GetSupportedArchs 获取支持的架构 GetSupportedArchs(platform string) []string } ``` 5. 实现默认平台工厂: - 创建DefaultPlatformAdapterFactory结构体,实现PlatformAdapterFactory接口: ```go type DefaultPlatformAdapterFactory struct { logger log.Logger } ``` - 实现CreateAdapter方法,根据平台和架构创建适配器 6. 定义平台检测接口: - 创建PlatformDetector接口,用于检测当前平台: ```go type PlatformDetector interface { // DetectCurrentPlatform 检测当前平台 DetectCurrentPlatform() (string, string, error) // IsCurrentPlatform 判断是否为当前平台 IsCurrentPlatform(platform string, arch string) bool } ``` - 实现DefaultPlatformDetector,使用runtime包检测当前平台 7. 定义平台兼容性检查: - 创建兼容性检查方法,用于验证目标平台是否受支持 - 实现跨平台构建的兼容性检查 ## 单元测试要求 1. 测试平台信息结构: - 验证结构体字段 - 测试序列化和反序列化 2. 测试平台适配器接口: - 验证接口方法定义 - 测试接口文档 3. 测试平台常量: - 验证常量定义 - 测试常量使用 4. 测试平台工厂接口: - 验证接口方法定义 - 测试默认工厂实现 5. 测试平台检测接口: - 验证接口方法定义 - 测试默认检测器实现 6. 测试平台兼容性检查: - 验证兼容性检查方法 - 测试跨平台构建兼容性 ## 依赖关系 - 依赖任务01(项目初始化) - 依赖任务02(日志系统实现) - 依赖任务03(错误处理框架) - 依赖任务05(配置模型定义) - 被任务10(Windows平台适配器)和任务11(Linux平台适配器)依赖 ## 完成标准 1. PlatformInfo结构体已定义并文档完善 2. PlatformAdapter接口已定义并文档完善 3. 平台常量已定义 4. PlatformAdapterFactory接口已定义并文档完善 5. DefaultPlatformAdapterFactory已实现 6. PlatformDetector接口已定义并文档完善 7. DefaultPlatformDetector已实现 8. 平台兼容性检查方法已实现 9. 所有单元测试通过 10. 代码符合项目的Go语言开发规范 11. 接口设计满足扩展性和可测试性要求