スライスを作成しようとしていて、リテラルとポインタに問題があります。それは、私のスライスにポインタを渡したという事実が気に入らない場合のように見えます。例えば、私はコンポーネントと呼ばれるパッケージタイプを持ち、コンポーネントタイプを保持しています。下記参照。リテラルとポインタを返す
package components
import()
type Component struct {
Name string
Element string
Color string
}
func (c *Component) SetName(name string) {
c.Name = name
}
func (c *Component) SetElement(element string) {
c.Element = element
}
func (c *Component) SetColor(color string) {
c.Color = color
}
func (c *Component) GetName() string {
return c.Name
}
func (c *Component) GetColor() string {
return c.Color
}
func (c *Component) GetElement() string {
return c.Element
}
func NewComponent(name string, color string, element string) *Component {
c := &Component{}
c.SetName(name)
c.SetColor(color)
c.SetElement(element)
return c
}
今、私は私が雪のように呪文部品を作っています、砂、サンビーム、湧などに私のすべてのコンポーネントを配置するスライスを作成しようとしています
//Creating SpringWater Component with Setters
SpringWater := components.Component{}
SpringWater.SetName("SpringWater")
SpringWater.SetColor("Blue")
SpringWater.SetElement("Water")
//Creating Sand Component using the Constructor
Sand := components.NewComponent("Sand", "Red", "Earth")
ERRORはCOMPLILE ON HERE起こります。 compSlice:=([] components.Component、5) compSlice =アペンド(compSlice、湧き水、砂)
ERRORが作る:土を使用することはできませんタイプコンポーネントとしてタイプ(* components.Component)としてndを追加します。
セッターとフィールドの設定を直接使用することができますが、これをスライダに追加することはできますが、*ポインタを返すメソッドを使用するとスライスは遵守しません。私は理解していないし、困難な問題があるだけです。私はプログラミングには新しく、基本的にスクリプトから来ているので、これについて私を許して、同様の質問を見ましたが、この文脈では理解しません。
そして、あなたのデザインにコメントここ
は、コメントとコードです。構造体メンバを 'SetName'のような関数の背後に隠したい場合は、それらを小文字にする必要があります。それらをUpperCaseにすると、誰もが直接使用できるようになります。そして私はそれをやっているだろう。なぜなら、機能を隠すことは愚かであると考えるからだが、あなたはGoインターフェースのためにそれを必要としている。 –OKもう少し詳しく説明して、私が何を思いついたのか、まだ苦労しているのか、皆さんに知らせてください。私はすごくすぐに私に返信してくれる人がいらっしゃいました。みんなありがとう – RedBloodMage