Membuat aplikasi desktop menggunakan Golang dan Fyne

Hari ini kita akan mengembangkan aplikasi desktop di Golang


Mengembangkan aplikasi desktop golang bukanlah tugas yang khas bagi seorang programmer golang. Tidak banyak perpustakaan open source yang siap pakai bagi Google untuk menyelesaikannya atas permintaan desktop golang, contoh dari apa yang ditemukan:

  1. mengerti
  2. Fyne
  3. Gxui

Fyne dipilih karena repositori github dari proyek ini berisi jumlah bintang terbesar, dan juga mendukung desain Material yang terkenal.

Mari kita lihat opsi apa untuk menampilkan antarmuka yang disediakannya untuk kita.

Widget berikut tersedia dari kotak:

  • Tombol.
  • Wadah (untuk mengelompokkan widget anak dan mengarahkannya secara horizontal atau vertikal).
  • Kotak centang, bidang untuk memasukkan teks atau kata sandi.
  • Bentuk dan kelompok.
  • Hyperlink.
  • Ikon.
  • Label.
  • Bar Kemajuan.
  • Wadah yang dapat digulir.
  • Beralih.
  • Pilih
  • Tab.
  • Bilah Alat.

Jika di antara elemen antarmuka yang diperlukan tidak ditemukan, dimungkinkan untuk mengimplementasikan widget khusus menggunakan API sederhana.

Mari kita coba menulis aplikasi golang gui untuk menampilkan ramalan cuaca untuk beberapa hari ke depan menggunakan Fyne. Kode aplikasi lengkap dapat ditemukan pada tautan di github.

Pertama-tama, buat proyek kosong di Golang dan instal Fyne.

go get fyne.io/fyne

Karena aplikasi akan menampilkan informasi cuaca, Anda perlu mendapatkan informasi ini. Untuk melakukan ini, buka API Peta Cuaca Terbuka.

func getWeatherForecast(result interface{}) error {
  var url = fmt.Sprintf("https://api.openweathermap.org/data/2.5/forecast?q=Voronezh&cnt=4&units=metric&appid=%s", openWeatherMapApiKey) //    
  response, err := http.Get(url)
  if err != nil {
     fmt.Print(err)
  }
  defer response.Body.Close()
  return json.NewDecoder(response.Body).Decode(result)
}

Untuk menyimpan data, Anda dapat menggunakan struktur berikut (di dalamnya saya hanya menyisakan beberapa bidang yang dikembalikan API), perlu memperhatikan fakta bahwa semua bidang struktur dikapitalisasi, tetapi dalam respons API mereka dijelaskan dengan yang kecil.

type WeatherInfo struct {
  List []WeatherListItem `json:list`
}

type WeatherListItem struct {
  Dt      int           `json:dt`
  Main    WeatherMain   `json:main`
  Weather []WeatherType `json:weather`
}

type WeatherMain struct {
  Temp      float32 `json:temp`
  FeelsLike float32 `json:feels_like`
  Humidity  int     `json:humidity`
}

type WeatherType struct {
  Icon string `json:icon`
}

Sekarang kita dapat menerima data cuaca dalam bentuk struktur. Tetap menerapkan antarmuka aplikasi desktop golang.

func setupUi(weatherInfo WeatherInfo) {
  app := app.New()

  w := app.NewWindow("   ")

  var vBox = widget.NewVBox() //        

  for i := 0; i < len(weatherInfo.List); i++ {
     var weatherForDay = weatherInfo.List[i] //     
     var weatherMainGroup = widget.NewVBox(
        widget.NewLabel(fmt.Sprintf(": %.2f °C", weatherForDay.Main.Temp)),
        widget.NewLabel(fmt.Sprintf(" : %.2f °C", weatherForDay.Main.FeelsLike)),
        widget.NewLabel(fmt.Sprintf(": %d%%", weatherForDay.Main.Humidity)),
     ) //  3    

     var weatherTypeGroup = widget.NewVBox()
     for weatherTypeI := 0; weatherTypeI < len(weatherForDay.Weather); weatherTypeI++ {
        var resource, _ = fyne.LoadResourceFromURLString(fmt.Sprintf("http://openweathermap.org/img/wn/%s.png", weatherForDay.Weather[weatherTypeI].Icon)) //   ,   
        var icon = widget.NewIcon(resource)
        weatherTypeGroup.Append(icon)
     }

     var time = time2.Unix(int64(weatherInfo.List[i].Dt), 0).String()
     vBox.Append(widget.NewGroup(time)) 
     vBox.Append(widget.NewHBox(weatherMainGroup, weatherTypeGroup))
  }
  vBox.Append(widget.NewButton("", func() {
     app.Quit()
  }))

  w.SetContent(vBox) //    

  w.ShowAndRun() //   
}

Di sini kita membuat widget, mengisinya dengan data, dan mengumpulkannya dalam kelompok untuk mengatur urutan tampilan.

Selesai

Tetap hanya menjalankan aplikasi dan melihat tampilannya. Karena frameworknya adalah cross-platform, Anda bisa menjalankannya di Windows dan macOS dan Linux.

gambar
Meluncurkan aplikasi golang mac os

gambar
Dan sepertinya aplikasi windows golang

Hasilnya, ternyata membuat aplikasi desktop golang cross-platform sederhana, dan coba Fyne beraksi. Sayangnya, go tidak layak dipertimbangkan sebagai bahasa yang cocok untuk mengembangkan aplikasi desktop modern, namun, selalu menarik untuk menyentuh sesuatu yang baru dan tidak biasa dalam praktiknya.

Terima kasih atas perhatiannya.

All Articles