package astro import ( _ "embed" "encoding/json" "errors" "fmt" "os" "strings" "time" ) //go:embed city.json var cityByte []byte type City struct { Code int `json:"code"` CityName string `json:"city_name"` Lat float64 `json:"lat"` Lon float64 `json:"lon"` } var lon, lat, height, loc float64 var city string func SetLonLatHeight(lo, la, he float64) error { lon, lat, height = lo, la, he return os.WriteFile(".ast.env", []byte(fmt.Sprintf("%f,%f,%f,%f", lon, lat, height, loc)), 0644) } func LoadLonLatHeight() error { if _, err := os.Stat(".ast.env"); errors.Is(err, os.ErrNotExist) { return nil } b, err := os.ReadFile(".ast.env") if err != nil { return err } _, err = fmt.Sscanf(string(b), "%f,%f,%f,%f", &lon, &lat, &height, &loc) return err } func GetLonLatHeight() (float64, float64, float64) { return lon, lat, height } func Lon() float64 { return lon } func Lat() float64 { return lat } func Height() float64 { return height } func GetFromCity(name string) bool { var c []City err := json.Unmarshal(cityByte, &c) if err != nil { return false } for _, v := range c { if strings.Contains(v.CityName, name) { lon, lat = v.Lon, v.Lat loc = 8 time.Local = time.FixedZone("Local", int(loc*3600)) return true } } return false }