Установка структурных полей из функции - PullRequest
0 голосов
/ 12 марта 2019

Я уверен, что есть лучший способ сделать это, и я понимаю, что это просто, но я новичок, чтобы идти со мной.Я пытаюсь установить поля структуры (playersObject) из двух функций (setCalculations и Calculations), более конкретно, я передаю значения двух массивов (playerData и playerData2 от основного кэти функции, выполняя вычисления в этих функциях, и хотят вернуть значения, чтобы их можно было установить в структуре.

package main
import (
    "fmt"
    "os"
    "log"
    "strings"
    "bufio"
    "strconv"
)

type playersObject struct {

        firstname, lastname string
        batting_average, slugging_percentage, OBP, teamaverage float64
    }


func strToFloat(playerData []string, playerData2 []float64) []float64 {

        for _, i := range playerData[2:] {
            j, err := strconv.ParseFloat(i, 64)
            if err != nil {
                panic(err)
            }
            playerData2 = append(playerData2, j)
        }
        return playerData2
}

func (player *playersObject) setCalculations (playerData []string, playerData2 []float64)  {

    player.firstname = playerData[1]
    player.lastname = playerData[0]
    player.batting_average = (playerData2[2] + playerData2[3] + playerData2[4] + playerData2[5]) / (playerData2[1])
    player.slugging_percentage = ((playerData2[2]) + (playerData2[3]*2) + (playerData2[4]*3) + (playerData2[5]*4) )/(playerData2[1])
    player.OBP = (( playerData2[2] + playerData2[3] + playerData2[4] + playerData2[5] +playerData2[6] +playerData2[7])/ (playerData2[0]))

}

func (player *playersObject) Calculations () (string, string, float64, float64, float64, ) {

    return player.firstname, player.lastname, player.batting_average, player.slugging_percentage, player.OBP
}


func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter file name: ")
    fileName, err := reader.ReadString('\n')
        if err != nil {
            log.Fatalf("failed opening file: %s", err)
        }
    fileName = strings.TrimSuffix(fileName, "\n")

    //fmt.Printf("%q\n", fileName)
    file, err := os.Open(fileName)
       scanner := bufio.NewScanner(file)
       scanner.Split(bufio.ScanLines)
       var fileOfPlayers []string

       for scanner.Scan() {
           fileOfPlayers = append(fileOfPlayers, scanner.Text())
       }

       file.Close()


      // var total_Average_sum float64 = 0
       var countofplayers float64 = 0
       //var total_average float64 = 0
       for _, player := range fileOfPlayers {
        countofplayers ++
        playerData := strings.Split(player, " ")
        var playerData2 = []float64{}
        playerData2 = strToFloat(playerData, playerData2)

        player := playersObject{}
        player.setCalculations(playerData, playerData2)

        calcs := player.Calculations()

        fmt.Println(firstname, lastname, batting_average, slugging_percentage, OBP)

    }
}

Я получаю ошибки multiple-value player.Calculations() in single-value contextand undefined: firstname, lastname, batting_average, slugging_percentage, OBP

Я знаю, что это очень неправильно, но, опять же, я новичок в работе и ООП. Если это можно сделать любым более простым способом, я открыт для этого и ценю всю помощь и советы. Спасибо

1 Ответ

2 голосов
/ 12 марта 2019

Здесь выдается ошибка, потому что Calculations() возвращает несколько значений, но вы пытаетесь присвоить его одной переменной.

Вам необходимо изменить вызов метода player.Calculations() с

    calcs := player.Calculations()

до

firstname, lastname, batting_average, slugging_percentage, OBP := player.Calculations()

Сказав, что я бы порекомендовал вам прочитать больше о Голанге, вы можете здесь .Вам необходимо переписать код с учетом лучших практик go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...