В этой статье вы узнаете, как создать калькулятор с нуля. Мы сосредоточимся на Go и его пакете Fyne, который помогает создавать приложения на основе графического интерфейса для каждой операционной системы, даже для мобильных устройств, поэтому, если вы хотите узнать больше о Fyne или если вы новичок в Go, вам нужно сначала рассказать о Go и Fyne. .
Используемые пакеты
Пакеты, которые мы собираемся использовать в этой программе, перечислены ниже:
- Fyne за создание графического интерфейса и всех его компонентов.
- GoValuate поддерживает вычисление произвольных C-подобных арифметических/строковых выражений, поэтому мы можем получить результат используемого выражения.
Пакет Файн
Fyne — это простой в использовании инструментарий пользовательского интерфейса и API приложений, написанные на Go. Он предназначен для создания приложений, которые работают на настольных и мобильных устройствах с единой кодовой базой.
Для разработки приложений с помощью Fyne вам понадобится Go версии 1.14 или новее, компилятор C и инструменты разработки вашей системы. Если вы не уверены, все ли это установлено, или не знаете, как это сделать, ознакомьтесь с документом «Начало работы».
package main import ( "strconv" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" "github.com/Knetic/govaluate" ) func main() { myApp := app.New() myWindow := myApp.NewWindow("Calculator") mainResult := widget.NewLabel("") mainS := "" mainResult.SetText(mainS) one := widget.NewButton("1", func() { mainS += "1" }) two := widget.NewButton("2", func() { mainS += "2" }) three := widget.NewButton("3", func() { mainS += "3" }) four := widget.NewButton("4", func() { mainS += "4" }) five := widget.NewButton("5", func() { mainS += "5" }) six := widget.NewButton("6", func() { mainS += "6" }) seven := widget.NewButton("7", func() { mainS += "7" }) eigth := widget.NewButton("8", func() { mainS += "8" }) nine := widget.NewButton("9", func() { mainS += "9" }) zero := widget.NewButton("0", func() { mainS += "0" }) clear := widget.NewButton("C", func() { mainS = "" }) plus := widget.NewButton("+", func() { mainS += "+" }) minus := widget.NewButton("-", func() { mainS += "-" }) multiply := widget.NewButton("*", func() { mainS += "*" }) divide := widget.NewButton("/", func() { mainS += "/" }) #fourth equal := widget.NewButton("=", func() { expression, err := govaluate.NewEvaluableExpression(mainS) if err == nil { result, err := expression.Evaluate(nil) if err == nil { mainS = strconv.FormatFloat(result.(float64), 'f', -1, 64) } else { mainS = err.Error() } } else { mainS = err.Error() } }) #five updating it each time go func() { for { mainResult.SetText(mainS) } }() #creating layout from the given buttons myWindow.SetContent(container.NewVBox( mainResult, container.NewGridWithColumns(3, divide, multiply, minus, // plus, ), container.NewGridWithColumns(2, container.NewGridWithRows(3, container.NewGridWithColumns(3, seven, eigth, nine, ), container.NewGridWithColumns(3, four, five, six, ), container.NewGridWithColumns(3, one, two, three, ), ), plus, ), container.NewGridWithColumns(2, container.NewGridWithColumns(2, clear, zero, ), equal, ), ), ) myWindow.ShowAndRun() }