Я передаю указатель на строку в метод, который принимает интерфейс (у меня есть несколько версий метода с разными получателями, поэтому я пытаюсь работать с пустыми интерфейсами, чтобы я не оказался в конечном итогес кучей безумия. По сути, я хочу заполнить строку первым значением в срезе. Я могу видеть, как значение заполняется внутри функции, но затем по какой-то причине, в моем приложении, которое вызывает его,значение не меняется. Я подозреваю, что это какая-то проблема с арифметикой указателей, но я действительно могу использовать некоторую помощь!
У меня есть следующий интерфейс:
type HeadInterface interface{
Head(interface{})
}
И затем у меня естьследующие функции:
func Head(slice HeadInterface, result interface{}){
slice.Head(result)
}
func (slice StringSlice) Head(result interface{}){
result = reflect.ValueOf(slice[0])
fmt.Println(result)
}
и ... вот мой вызов функции из приложения, которое вызывает метод ...
func main(){
test := x.StringSlice{"Phil", "Jessica", "Andrea"}
// empty result string for population within the function
var result string = ""
// Calling the function (it is a call to 'x.Head' because I lazily just called th import 'x')
x.Head(test, &result)
// I would have thought I would have gotten "Phil" here, but instead, it is still empty, despite the Println in the function, calling it "phil.
fmt.Println(result)
}
* ПРИМЕЧАНИЕ: я знаю, что получениепервый элемент не должен быть таким сложным и может быть slice [0] как прямое утверждение, но это скорее упражнение в повторно используемом коде, а также в попыткечтобы получить представление об указателях, поэтому, пожалуйста, не указывайте на это решение - я бы получил гораздо больше пользы от решения моей настоящей проблемы здесь * :)