это мой код:Указатели структурировать в Go Язык
package main
import ("fmt")
type Message struct {
Text []byte
Tag string
}
func main() {
var m Message
pkt := []byte("Hey")
editMessage(&m, &pkt)
fmt.Println(string(m.Text))
}
func editMessage(m *Message, pkt *[]byte) {
m.Text = *pkt
}
И я получаю «Эй», как ожидается, на выходе.
Если я изменю m.Text = *pkt
с (*m).Text = *pkt
Он также работает!
Какая правильная/более эффективная версия? Или это просто ярлык?
Эта вещь теперь не работает все время, если я использую
c *net.Conn
в качестве входных данных в функции, я должен использовать
something := (*c).RemoteAddr()
, чтобы заставить его работать.
Спасибо
Обратите внимание, что это не происходит в реальном коде, потому что вы почти никогда не должны использовать указатель на интерфейс. – JimB
И вы обычно не используете указатели на срезы (или карты или строки). Срез уже относится к базовым данным, поэтому нет необходимости в дополнительном указании (если вы не хотите обновлять длину или емкость среза, но во многих таких случаях лучше вернуть результирующий срез, например, «append»). –
Я использую его, потому что мне нужно получить исходный IP-адрес соединения, внутри функции и повысить эффективность. Я передал соединение как ссылку вместо того, чтобы справляться с ней. Я ошибаюсь? – Michael