30 lines
819 B
Go
30 lines
819 B
Go
package platform
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"runtime"
|
|
)
|
|
|
|
func OpenURL(url string) error {
|
|
name, args, err := openCommand(runtime.GOOS, url)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return exec.Command(name, args...).Start()
|
|
}
|
|
|
|
var platformOpeners = map[string]func(string) (string, []string){
|
|
"darwin": func(u string) (string, []string) { return "open", []string{u} },
|
|
"linux": func(u string) (string, []string) { return "xdg-open", []string{u} },
|
|
"windows": func(u string) (string, []string) { return "rundll32", []string{"url.dll,FileProtocolHandler", u} },
|
|
}
|
|
|
|
func openCommand(goos, url string) (string, []string, error) {
|
|
if opener, supported := platformOpeners[goos]; supported {
|
|
name, args := opener(url)
|
|
return name, args, nil
|
|
}
|
|
return "", nil, fmt.Errorf("opening URLs is not supported on %s", goos)
|
|
}
|