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