package main import ( "strings" ) type GoOS string const ( Windows = GoOS("windows") MacOS = GoOS("darwin") Linux = GoOS("linux") FreeBSD = GoOS("freebsd") UnknownOS = GoOS("unknown") ) type GoArch string const ( X86 = GoArch("386") Amd64 = GoArch("amd64") Arm = GoArch("arm") Arm64 = GoArch("arm64") Mips64 = GoArch("mips64") UnknownArch = GoArch("unknown") ) func parseOS(rawOS string) GoOS { osStr := strings.ToLower(rawOS) if osStr == "windows" || osStr == "win" { return Windows } if osStr == "darwin" || osStr == "mac" || osStr == "macos" || osStr == "osx" { return MacOS } if osStr == "linux" || osStr == "debian" || osStr == "ubuntu" || osStr == "redhat" || osStr == "centos" { return Linux } if osStr == "freebsd" { return FreeBSD } return UnknownOS } func parseArch(rawArch string) GoArch { archStr := strings.ToLower(rawArch) if archStr == "x86" || archStr == "386" || archStr == "i386" { return X86 } if archStr == "amd64" || archStr == "x86-64" || archStr == "x64" { return Amd64 } if archStr == "arm" { return Arm } if archStr == "arm64" { return Arm64 } if archStr == "mips" || archStr == "mips64" { return Mips64 } return UnknownArch } func getSuffix(os GoOS, arch GoArch) string { suffix := "-custom" switch os { case Windows: switch arch { case X86: suffix = "-windows-32" case Amd64: suffix = "-windows-64" } case MacOS: suffix = "-macos" case Linux: switch arch { case X86: suffix = "-linux-32" case Amd64: suffix = "-linux-64" case Arm: suffix = "-linux-arm" case Arm64: suffix = "-linux-arm64" case Mips64: suffix = "-linux-mips64" } case FreeBSD: switch arch { case X86: suffix = "-freebsd-32" case Amd64: suffix = "-freebsd-64" case Arm: suffix = "-freebsd-arm" } } return suffix }