そこで、xpath[]string 型を作成し、対応する関数、つまり、push()、pop()、および string() を作成しました。
私の問題は、型がその状態を失うことです。スライスは参照型だと思っていたので、少し混乱しています。また、関数をポインター レシーバーに変更しようとすると、いくつかのコンパイル エラーが発生します。この時点でこれを修正するために、[]string を単一の []string フィールドを持つ構造体に変更しました。ただし、基本タイプとしてスライスだけを使用して機能させることができないのはまだ気になります。
正しいアプローチは何ですか?
package main import ( "fmt" "strings" ) type xPath []string func (xp xPath) push(entry string) { xp = append(xp, entry) } func (xp xPath) String() string { sb := strings.Builder{} sb.WriteString("/") sb.WriteString(strings.Join(xp, "/")) return sb.String() } func main() { xp := xPath{} xp.push("rss") xp.push("channel") xp.push("items") fmt.Println(xp) // Output: / // Wanted: /rss/channel/items }
正しいプッシュ機能:
リーリー
スライスは、値を変更したい状況 (インデックスの使用など) における参照タイプです。一方、それらを再割り当てしてスライス全体を置き換える場合は、ポインタを使用する必要があります。
スタックに関しては、もっと良い方法がいくつかあります。
この質問を見てください。
以上がスライスから型を作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。