Initial QSfera import
This commit is contained in:
+78
@@ -0,0 +1,78 @@
|
||||
// Package goinfo provide some standard util functions for go.
|
||||
package goinfo
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GoVersion get go runtime version. eg: "1.18.2"
|
||||
func GoVersion() string {
|
||||
return runtime.Version()[2:]
|
||||
}
|
||||
|
||||
// GoInfo define
|
||||
//
|
||||
// On os by:
|
||||
//
|
||||
// go env GOVERSION GOOS GOARCH
|
||||
// go version // "go version go1.19 darwin/amd64"
|
||||
type GoInfo struct {
|
||||
Version string
|
||||
GoOS string
|
||||
Arch string
|
||||
}
|
||||
|
||||
// match "go version go1.19 darwin/amd64"
|
||||
var goVerRegex = regexp.MustCompile(`\sgo([\d.]+)\s(\w+)/(\w+)`)
|
||||
|
||||
// ParseGoVersion get info by parse `go version` results.
|
||||
//
|
||||
// Examples:
|
||||
//
|
||||
// line, err := sysutil.ExecLine("go version")
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// info, err := goinfo.ParseGoVersion()
|
||||
// dump.P(info)
|
||||
func ParseGoVersion(line string) (*GoInfo, error) {
|
||||
// eg: [" go1.19 darwin/amd64", "1.19", "darwin", "amd64"]
|
||||
lines := goVerRegex.FindStringSubmatch(line)
|
||||
if len(lines) != 4 {
|
||||
return nil, errors.New("input go version info is invalid")
|
||||
}
|
||||
|
||||
info := &GoInfo{
|
||||
Version: strings.TrimPrefix(lines[1], "go"),
|
||||
}
|
||||
info.GoOS = lines[2]
|
||||
info.Arch = lines[3]
|
||||
|
||||
return info, nil
|
||||
}
|
||||
|
||||
// OsGoInfo fetch and parse
|
||||
func OsGoInfo() (*GoInfo, error) {
|
||||
cmdArgs := []string{"env", "GOVERSION", "GOOS", "GOARCH"}
|
||||
bs, err := exec.Command("go", cmdArgs...).Output()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lines := strings.Split(strings.TrimSpace(string(bs)), "\n")
|
||||
if len(lines) != len(cmdArgs)-1 {
|
||||
return nil, errors.New("returns go info is not full")
|
||||
}
|
||||
|
||||
info := &GoInfo{}
|
||||
info.Version = strings.TrimPrefix(lines[0], "go")
|
||||
info.GoOS = lines[1]
|
||||
info.Arch = lines[2]
|
||||
|
||||
return info, nil
|
||||
}
|
||||
Reference in New Issue
Block a user