package main import ( "fmt" "bufio" "os" "log" "strconv" ) func readInput() *string { reader := bufio.NewReader(os.Stdin) fmt.Print("Rechnung: ") text, err := reader.ReadString('\n') if err != nil { log.Fatal(err) } text = text[:len(text)-1] return &text } func parseCalculation(calculation *string) *int64 { for i := 0; i < len(*calculation); i++ { // no range because unicode would be wasteful if (*calculation)[i] == '+' { left, err := strconv.ParseInt((*calculation)[:i], 10, 64) if err != nil { log.Fatal(err) } right, err := strconv.ParseInt((*calculation)[i+1:], 10, 64) if err != nil { log.Fatal(err) } switch (*calculation)[i] { case '+': return add(&left, &right) default: log.Fatal("Unbekanntes Rechenzeichen") } } } singleNumber, err := strconv.ParseInt(*calculation, 10, 64) if err != nil { log.Fatal("Invalide Zahl") } return &singleNumber } func add(left *int64, right *int64) *int64 { result := *left + *right return &result } func main() { inputptr := readInput() resultptr := parseCalculation(inputptr) fmt.Printf("Ergebnis: %d", *resultptr) }