Why are the fields not accessible in this slice of structs?

Viewed 44

I have this method in a different package that is to return chart values from a website in a slice of structs. I can access all of the slices/fields inside the function (of charts)

type IndicatorStatus struct {
    chart int
    pAtr1 float64
    pAtr2 float64
    pAtr3 float64
    pSL   float64
}
    
func GetIndicatorStatus(chart string) ([]IndicatorStatus, error) {
        // create context
        ctx, cancel := chromedp.NewExecAllocator(context.Background(), append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false))...)
        defer cancel()
    
        ctx, cancel = chromedp.NewContext(ctx)
        defer cancel()
    
        // run task list
        var nChart []*cdp.Node
        var nAtr1 []*cdp.Node
        var nAtr2 []*cdp.Node
        var nAtr3 []*cdp.Node
        var nSl []*cdp.Node
    
        err := chromedp.Run(ctx,
            chromedp.Navigate(baseUrl+chart+"#signin"),
            chromedp.Click(`#overlap-manager-root > div > div.tv-dialog__modal-wrap.tv-dialog__modal-wrap--contain-size > div > div > div > div > div > div > div:nth-child(1) > div.i-clearfix > div > span`),
            chromedp.WaitVisible(`//input[@name="username"]`),
            chromedp.SendKeys(`//input[@name="username"]`, username),
            chromedp.SendKeys(`//input[@name="password"]`, password),
            chromedp.Click(`button[class="tv-button tv-button--size_large tv-button--primary tv-button--loader"`),
            chromedp.WaitReady(`*[class="valueItem-G1_Pfvwd"]`, chromedp.AtLeast(162)),
            chromedp.Nodes(`*[class*="chart-container "]`, &nChart, chromedp.ByQueryAll),
            chromedp.Nodes(`*[title="pSL"]`, &nSl, chromedp.ByQueryAll),
            chromedp.Nodes(`*[title="pAtr1"]`, &nAtr1, chromedp.ByQueryAll),
            chromedp.Nodes(`*[title="pAtr2"]`, &nAtr2, chromedp.ByQueryAll),
            chromedp.Nodes(`*[title="pAtr3"]`, &nAtr3, chromedp.ByQueryAll),
        )
        if err != nil {
            return []IndicatorStatus{}, err
        }
    
        var charts []IndicatorStatus
    
        for i := 0; i < len(nChart); i++ {
            var parseErr error
            var atr1, atr2, atr3, sl float64
    
            atr1, parseErr = types.Pfloat(nAtr1[i].Children[0].NodeValue)
            atr2, parseErr = types.Pfloat(nAtr2[i].Children[0].NodeValue)
            atr3, parseErr = types.Pfloat(nAtr3[i].Children[0].NodeValue)
            sl, parseErr = types.Pfloat(nSl[i].Children[0].NodeValue)
            if parseErr != nil {
                return []IndicatorStatus{}, parseErr
            }
    
            charts = append(charts, IndicatorStatus{i, atr1, atr2, atr3, sl})
        }
    
        return charts, nil
    }

but when I try to access it from another package the slice fields are not accessible.

iStatus, isErr := cartographer.GetIndicatorStatus(cartographer.BTCUSD)

i get undefined type cartographer.IndicatorStatus has no field or method pAtr1 when trying to access

iStatus[0].pAtr1
0 Answers
Related