Home >Backend Development >Golang >How to define an interface with properties?
php editor Yuzai will introduce to you how to define an interface with attributes. In PHP, an interface is a convention that defines the methods a class should implement. However, sometimes we also need to define properties in the interface. To define an interface with properties, we can use constants to simulate properties and assign values in the class that implements the interface. In this way, we can define and use properties in the interface. Next, let's take a look at the specific implementation method.
I have a question: Is it possible to set an interface for a linear space?
Let me remind you that in linear space l, there are operations of adding elements and multiplying elements by numbers. In addition, two properties are also satisfied:
1) a b in
l2)l in ak, where k - scalar
I present the interface for linear space in the following form:
type Point interface { } type LinSpace interface { Sum(x, y Point) Prod(x Point, k float64) }
How to consider the above two properties in the interface definition?
Interfaces can only contain methods.
You can do this:
// effective go says: interface names should contain prefix -er type linspacer interface { sum() float64 prod(k float64) float64 } // struct that implements interface type linspaceimpl struct { a float64 b float64 } // implementation of sum() method // also, you don't need to pass a and b vars // because they're already exist in linspaceimpl func (l *linspaceimpl) sum() float64 { return l.a + l.b } // implementation of prod() method // unlike the sum() method, here we need extra param - k // so it has to be passed, or you can add it to // linspaceimpl as another fields but it doesn't // make any sense though func (l *linspaceimpl) prod(k float64) float64 { return l.a * k } // unnecessary "constructor" to optimize your main function // and clarify code func newlinspace(a, b float64) linspacer { // since linspaceimpl correctly implements linspacer interface // you can return instance of linspaceimpl as linspacer return &linspaceimpl{ a: a, b: b, } }
You can then do this in your main (or other) function:
// Use any float values ls := NewLinSpace(11.2, 24.7) fmt.Println(ls.Sum()) // 35.9 fmt.Println(ls.Prod(30.2)) // 338.23999999999995
This is how "oop" works in go.
The above is the detailed content of How to define an interface with properties?. For more information, please follow other related articles on the PHP Chinese website!