dongxiaowei_1234 2019-03-12 14:03 采纳率: 0%
浏览 20

从函数设置结构域

I'm sure there is a better way to do this, and I understand it's simple but I am new to go so bear with me. I am trying to set the fields of a struct (playersObject) from two functions (setCalculations and Calculations), more specifically, I am passing in values of two arrays (playerData and playerData2 from main to those functions, performing calculations in those functions, and want to return the values so that they can be set within the struct.

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('
')
        if err != nil {
            log.Fatalf("failed opening file: %s", err)
        }
    fileName = strings.TrimSuffix(fileName, "
")

    //fmt.Printf("%q
", 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)

    }
}

I recieve the errors multiple-value player.Calculations() in single-value contextand undefined: firstname, lastname, batting_average, slugging_percentage, OBP

I know this is very incorrect but again I am new to go and OOP. If this can be done in any simpler way I am open to it and appreciate all help and tips. Thank you

  • 写回答

1条回答 默认 最新

  • dongmu2517 2019-03-12 14:18
    关注

    Here, the error is thrown because Calculations() returns multiple values but you are trying to assign it to a single variable.

    You need to change the player.Calculations() method invocation from

        calcs := player.Calculations()
    

    to

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

    Having said that I would recommend you to read more about golang may be here. You need to re-write the code in view of go best practises

    评论

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法