Hoje vamos desenvolver um aplicativo de desktop em Golang
Desenvolver um aplicativo de desktop golang não é uma tarefa típica para um programador de golang. Não há muitas bibliotecas de código aberto prontas para o Google resolvê-lo a pedido do golang desktop, exemplos do que foi encontrado:- pegou
- Fyne
- Gxui
Fyne foi escolhido, pois o repositório github deste projeto contém o maior número de estrelas e também suporta o notório design de materiais.Vamos ver quais opções para exibir a interface que ela nos fornece.Os seguintes widgets estão disponíveis na caixa:- Botão.
- Um contêiner (para agrupar widgets filhos e direcioná-los horizontal ou verticalmente).
- Caixa de seleção, campos para inserir texto ou senha.
- Formulários e grupos.
- Hiperlink.
- O ícone.
- O rótulo.
- Barra de progresso.
- Um contêiner rolável.
- Interruptor.
- Selecione
- Guias.
- Barra de ferramentas.
Caso entre os elementos da interface o necessário não tenha sido encontrado, é possível implementar widgets personalizados usando uma API simples.Vamos tentar escrever um aplicativo golang gui para exibir previsões do tempo para os próximos dias usando o Fyne. O código completo do aplicativo pode ser encontrado no link no github.Primeiro, crie um projeto vazio no Golang e instale o Fyne.go get fyne.io/fyne
Como o aplicativo exibirá informações meteorológicas, é necessário obter essas informações. Para fazer isso, acesse a API Open Weather Map.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)
}
Para armazenar dados, você pode usar a seguinte estrutura (deixei apenas alguns dos campos que a API retorna), vale a pena prestar atenção ao fato de que todos os campos da estrutura estão em maiúscula, mas na resposta da API eles são descritos com um pequeno.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`
}
Agora podemos receber dados climáticos na forma de uma estrutura. Resta implementar a interface do aplicativo de 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)),
)
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()
}
Aqui, criamos nossos widgets, os preenchemos com dados e os coletamos em grupos para organizar a ordem em que são exibidos.Feito.Resta apenas executar o aplicativo e ver como ele se parece. Como a estrutura é multiplataforma, você pode executá-la no Windows e no macOS e Linux.
Lançado aplicativo golang para mac OS
e parece um aplicativo golang windowsComo resultado, acabou criando um aplicativo de desktop golang simples para várias plataformas e tente o Fyne em ação. Infelizmente, vale a pena considerar o go como uma linguagem adequada para o desenvolvimento de aplicativos de desktop modernos; no entanto, é sempre interessante tocar em algo novo e incomum na prática.Obrigado a todos pela atenção.