В этой статье вы узнаете, как создать калькулятор с нуля. Мы сосредоточимся на 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()
}

ProgramminGeeksClub.com