Я пишу небольшое GUI-приложение на Gotk3
, это моя базовая установка в псевдокоде:
type Point struct {
X float64
Y float64
IsSelected bool
}
func getClosestElement(pT []Point, p Point, maxDist float64) Point {
/* returns the point from pT with the minimum distance to p */
}
func main() {
// GTK init ..
selectedPoints := make([]Point, 0)
/* GTK-Event onMouseClick */
{
/* if left mouse click */
selectedPoints = append(selectedPoints, Point{X: event.x, Y: event.y})
/* if right mouse click */
closestPoint = getClosestElement(selectedPoints, Point{X: event.x, Y: event.y}, 15.0)
closestPoint.IsSelected = true
}
/* GTK-Event Draw */
{
/* Loop over all selectedPoints */
if selectedPoint.IsSelected
/* Draw point in blue and also print to console, if a selected point was detected */
else
/* Draw point in black */
}
}
Но почему-то, хотя получение ближайшего пункта из selectedPoints
работает нормальноЯ никогда не получаю консольный вывод для циклического выполнения по точке, свойство IsSelected
которой имеет значение true, и при этом я не получаю синюю нарисованную точку (которая указывает на то, что эта точка выбрана).
Это оставляет меня с вопросомесли возвращаемая структура, которая была частью среза, который был изначально передан функции, фактически возвращается по значению, а не по ссылке.Таким образом, изменение этой возвращенной точки не меняет точку в массиве, которой она ранее принадлежала?