Я видел фрагмент кода, как показано ниже:
Просто интересно, как был реализован метод значения draw()
, почему на самом деле он может возвращать указатель структуры.
type Shape interface {
draw()
}
type Rectangle struct {
}
func (Rectangle) draw() {
fmt.Println("Draw Rectangle")
}
type Square struct {
}
func (Squre) draw() {
fmt.Println("Draw Square")
}
type Circle struct {
}
func (Circle) draw() {
fmt.Println("Draw Circle")
}
type ShapeFactory struct {
}
func (*ShapeFactory) CreateShape(shape string) Shape {
if shape == "Rectangle" {
return &Rectangle{}
} else if shape == "Square" {
return &Square{}
} else if shape == "Circle" {
return &Circle{}
}
return nil
}
Я думаю, должно ли быть так, как показано ниже, чтобы реализовать метод указателя, чтобы метод CreateShape
мог возвращать указатель структуры?
type Rectangle struct {
}
func (*Rectangle) draw() {
fmt.Println("Draw Rectangle")
}
Shape
является типом интерфейса, а не типом структуры. Типы*Rectangle
,*Square
и*Circle
реализуют интерфейсShape
, поэтому они могут быть возвращены этим методом. - person mkopriva   schedule 12.07.2021