You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang获取macOS版本并判断是否≥Big Sur

在Golang中获取macOS系统版本并判断是否≥Big Sur

方案1:调用系统sw_vers命令(纯Go,无需Cgo)

macOS自带的sw_vers命令可直接输出系统版本,通过Go的os/exec包执行该命令并解析结果即可,无需依赖第三方包或Cgo。

代码实现:

package main

import (
	"bufio"
	"fmt"
	"os/exec"
	"strconv"
	"strings"
)

// GetMacOSVersion 获取macOS主版本号(如Big Sur返回11)
func GetMacOSVersion() (int, error) {
	cmd := exec.Command("sw_vers", "-productVersion")
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		return 0, err
	}
	if err := cmd.Start(); err != nil {
		return 0, err
	}

	scanner := bufio.NewScanner(stdout)
	var versionStr string
	if scanner.Scan() {
		versionStr = scanner.Text()
	}
	if err := scanner.Err(); err != nil {
		return 0, err
	}
	if err := cmd.Wait(); err != nil {
		return 0, err
	}

	// 拆分版本字符串,取主版本号(如"11.7.10"拆分为"11")
	parts := strings.Split(versionStr, ".")
	if len(parts) == 0 {
		return 0, fmt.Errorf("invalid version string: %s", versionStr)
	}
	majorVersion, err := strconv.Atoi(parts[0])
	if err != nil {
		return 0, fmt.Errorf("failed to parse major version: %w", err)
	}
	return majorVersion, nil
}

func main() {
	majorVer, err := GetMacOSVersion()
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}

	// Big Sur的主版本号是11
	if majorVer >= 11 {
		fmt.Println("当前系统版本≥Big Sur")
	} else {
		fmt.Printf("当前系统主版本号为%d,低于Big Sur\n", majorVer)
	}
}

方案2:Cgo调用系统API(无外部命令依赖)

如果不想依赖外部命令,可通过Cgo调用macOS官方的NSProcessInfo API(更可靠,避免sw_vers被篡改的风险)。该API从macOS 10.10开始可用,完全覆盖Big Sur及后续版本。

代码实现:

package main

/*
#cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Foundation
#include <Foundation/Foundation.h>

int getMacOSMajorVersion() {
    NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];
    return version.majorVersion;
}
*/
import "C"
import "fmt"

func main() {
	majorVer := int(C.getMacOSMajorVersion())
	if majorVer >= 11 {
		fmt.Println("当前系统版本≥Big Sur")
	} else {
		fmt.Printf("当前系统主版本号为%d,低于Big Sur\n", majorVer)
	}
}

注意事项:

  • 编译时需开启Cgo:CGO_ENABLED=1 go build
  • 该代码仅能在macOS上编译运行,跨平台编译时需排除此逻辑

版本判断逻辑说明

Big Sur对应的macOS主版本号为11,后续Monterey(12)、Ventura(13)等版本主版本号均≥11,只需判断主版本号即可满足需求。

内容的提问来源于stack exchange,提问作者Baab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:35:04