Это мой первый пост, поэтому, пожалуйста, будьте осторожны со мной. :) ... Я довольно знаком со многими традиционными языками программирования, но я новичок в Go и не могу понять, как использовать слайсы и диапазоны. Код программы и комментарии ниже иллюстрируют мой ужас. Спасибо!
package main
import (
"fmt"
"time"
)
type myStruct struct {
Name string
Count int
}
Написал свою собственную функцию Mod, потому что я не смог найти в библиотеках Go.
func modMe(mod int, value int) int {
var m int
var ret int
m = value / mod
ret = value - m*mod
return ret
}
func main() {
mod := 4
cnt := 16
fmt.Printf("Record mod is %d\r\n", mod)
Объявление массива структуры и добавление некоторых записей
chartRecords := []myStruct{}
for i := 0; i<=cnt ;i++ {
n := myStruct{Count: i, Name: fmt.Sprintf("Joe%2d", i)} //Load some data
chartRecords = append(chartRecords,n)
}
Загрузка данных дает ожидаемый результат
fmt.Printf("======ORIGINAL LOADED VALUES========\r\n")
i := 0
for _, elem := range chartRecords {
fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) //Print out original values in the range
i = i + 1
}
Теперь я изменяю значения и печатаю их, чтобы увидеть, что они выглядят измененными. Это выглядит как ожидалось.
fmt.Printf("======MODIFIED VALUES EXPECTED========\r\n")
i = 0
for _, elem := range chartRecords { //looping thru the range of the data records
mm := modMe(mod, i) //modMe is my function to return the Mod of a number based on moduls 'mod'
elem.Count = mm //assigning the new mod value to Count
fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) //Print out this elem.Count element in the range
i = i + 1
}
Теперь я просто повторяю тот же диапазон снова и распечатываю ту же самую вещь.
Но вывод показывает исходные значения.
Я не понимаю, почему это происходит. Я предполагаю, что это связано с кусочками и добавлением значений, а не заменой значений.
fmt.Printf("======CHECK AGAIN AND VALUES ARE BACK TO ORIGINAL========\r\n") //Now lets loop through the same range
i = 0
for _, elem := range chartRecords {
fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) //Print out this elem.Count element in the range
i = i + 1
} //But this output shows the original values WHY??
time.Sleep(60 * time.Second)
}
Вывод выглядит так ...
Вывод скриншота
Заранее спасибо за совет.