私は学びつつ、ドキュメントのいくつかのサンプルコードについて質問しました。golangポインタ受信者と値受信者
私はポインタレシーバとバリューレシーバについて学びました。オブジェクト自体を変更したい場合は、ポインタレシーバを使用する必要があります。 Iはgo documentationのインターフェイスの詳細を読み、このコードのチャンクを発見した。
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
値レシーバを使用Less
とLen
方法は理にかなって、彼らはデータを返すとSequence
状態を変更されていないため。しかし、Swap
の例では、状態を変更しようとしているときに値受信機を使用している理由が不思議です。これは間違いですか、あるいは値/ポインタ受信者に何らかの欠陥があるという私の理解ですか?
ありがとうございます!
'Sequence'は参照型であるため、' Swap'関数はスライスの基礎となる値を入れ替えます。スライスの良い記事がここにあります:https://blog.golang.org/go-slices-usage-and-internals – squiguy
あなたは 's'を修正していません。あなたは 's [i]'と 's [j]'を変更しています。 –