[ā§Š.ā§Š] āĻāύā§āĻāĻžāϰāĻĢā§āϏ (interfaces)
āĻāĻāύ āĻāĻŽāϰāĻžÂ Go āĻāύā§āĻāĻžāϰāĻĢā§āϏ āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻŦā§āĨ¤ Go āϤ⧠āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ āύā§āϝāĻžāύā§āϝ OOP āĻŦā§āĻāĻĄ āϞā§āϝāĻžāĻāĻā§ā§ā§āĻā§āϰ āĻĨā§āĻā§ āĻāϞāĻžāĻĻāĻžāĨ¤ āϤāĻžāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻā§ āĻĨā§āĻā§ āϧāĻžāϰāĻŖāĻž āĻĨāĻžāĻāϞā§āĻ Go āĻāϰ āĻāύā§āϝ āύāϤā§āύāĻāĻžāĻŦā§ āĻāĻāĻāĻž āĻŦā§āĻāĻžāĻĒā§āĻž āĻāύāĻž āĻĒā§āϰā§ā§āĻāύāĨ¤
[ā§Š.ā§Š.ā§§] āĻāύā§āĻāĻžāϰāĻĢā§āϏ (interfaces) āĻā§ ?
 Go āϤā§Â āĻāύā§āĻāĻžāϰāĻĢā§āĻ¸Â āĻ āύā§āϝāĻžāύā§āϝ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āĻĨā§āĻā§ āĻāĻŋāύā§āύ āĨ¤ Go āϤā§Â āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻšāϞ āĻāĻžāϏā§āĻāĻŽ āĻāĻžāĻāĻĒ āϝāĻž āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰā§āϰ āĻāĻāĻāĻŋ āϏā§āĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ āĨ¤ āĻ āύā§āϝāĻāĻžāĻŦā§ āĻŦāϞāĻž āϝāĻžā§, āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻšāϞ āĻ āύā§āĻ āĻā§āϞ⧠āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰā§āϰ āϏāĻŽāώā§āĻāĻŋ āϝā§āĻāĻžāύ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻžāĻāĻĒā§āϰ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āĨ¤ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āĻ°Â āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžā§ āύāĻž āϤāĻŦā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžā§āĨ¤
āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āĻāĻŽāύ āĻā§āύ⧠āĻŽā§āĻĨāĻĄāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰ⧠āϝ⧠āĻŽā§āĻĨāĻĄā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āϏāĻŋāĻāύā§āĻāĻžāϰ āĻāĻā§ āĻĨā§āĻā§āĻ āĻā§āĻ¨ā§ Â āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ⧠āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāĻā§, āϤāĻžāĻšāϞ⧠āϏā§āĻ āĻāĻžāĻāĻĒāĻāĻŋ āϏā§āĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻāĻŋāĻā§ Â āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āĨ¤ āĻāĻŋāĻā§āĻāĻž āĻāĻāϰāĻāĻŽ āϝāĻĻāĻŋ āĻā§āύ⧠āĻāĻŋāĻā§ āĻšāĻžāĻāϏā§āϰ āĻŽāϤ⧠āĻšāĻžāĻāĻā§, āĻšāĻžāĻāϏā§āϰ āĻŽāϤ⧠āϏāĻžāĻāϤāĻžāϰ āĻāĻžāĻā§ āĻāĻŦāĻ āĻšāĻžāĻāϏā§āϰ āĻŽāϤ⧠āĻāĻžāĻāĻā§āύāĻŋ āĻĻā§āϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāĻāĻžāĻ āĻāĻāĻāĻž āĻšāĻžāĻāϏāĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϝāĻĻāĻŋ Animal āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āĻ°Â walk() āĻāĻŦāĻ bark() āĻĻā§āĻāĻŋ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰ āĻĨāĻžāĻā§ āĻāĻ°Â Dog āĻāĻžāĻāĻĒā§āϰ āĻāĻāĻāĻŋ Struct āϝāĻĻāĻŋ, āĻ āĻĻā§āĻāĻŋ āĻŽā§āĻĨāĻĄāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰ⧠āϤāĻžāĻšāϞ⧠āĻŦāϞāĻž āϝāĻžā§ āϝ⧠Dog Struct āĻāĻŋ Animal āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āĻā§ āĨ¤Â
[ā§Š.ā§Š.⧍] āĻĄāĻŋāĻā§āϞāĻžāϰāĻŋāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ (Declaring interfaces)  Â
  āĻāύā§āĻāĻžāϰāĻĢā§āĻ¸Â āĻĄāĻŋāĻā§āϞāĻžāϰā§āĻļāύ āĻāĻŋāĻā§āĻāĻž Struct āĻāϰ āĻŽāϤā§āĻ āĨ¤ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻžāĻāĻĒ āĻāĻŋāĻā§āĻžāϰā§āĻĄ , āϤāĻžāϰāĻĒāϰ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻŋāĻā§āĻžāϰā§āĻĄ āϞāĻŋāĻā§ āĻāĻžāϰā§āϞāĻŋ āĻŦā§āϰāĻžāĻā§āĻ āĻĻāĻŋā§ā§ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰāĻā§āϞ⧠āϞāĻŋāĻāϤ⧠āĻšāĻŦā§ āĨ¤
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āĻšā§ āĻ
type InterfaceName interface {
method1(arg1 type1, arg2 type2) returnType1
method2(arg3 type3) returnType2
method3() returnType3
// ...
}
  āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ āĻāĻāĻāĻŋ  Animal āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻžāĻŦā§Â –Â
type Animal interface {
walk() string
bark() string
}
    āĻāĻāĻžāύ⧠type āĻāĻŦāĻ interface āĻšāϞ āĻĻā§āĻāĻāĻŋ keyword , Animal āĻšāϞ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āύāĻžāĻŽ, walk(), bark() āĻšāϞ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻŽā§āĻĨāĻĄ āĻāĻŦāĻ string āĻšāϞ āĻŽā§āĻĨāĻĄā§āϰ āϰāĻŋāĻāĻžāϰā§āĻ¨Â āĻāĻžāĻāĻĒ āĨ¤ Â
[ā§Š.ā§Š.ā§Š] āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻāĻŋāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ (Implementing interfaces)Â
    Go – āϤ⧠āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āύā§āϝāĻžāύā§āϝ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻā§āϰ āĻŽāϤ⧠āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻāϏ āĻāĻŋāĻā§āĻžāϰā§āĻĄ āύā§āĻ āĻāĻŋāύā§āϤ⧠Struct āĻāĻžāĻāĻĒā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻž āĻšā§āĨ¤ Go – āϤ⧠inheritance āϏāĻžāĻĒā§āϰā§āĻ āĻāϰ⧠āύāĻž āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻŽā§āĻĒā§āĻāĻŋāĻļāύ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ Go – āϤ⧠āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āĻŦāĻļā§āϝāĻ āĻāĻāĻāĻŋ Struct āĻŦāĻž Non-struct āĻāĻžāĻāĻĒ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§, āϝāĻž āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋ āĻŽā§āĻĨāĻĄāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻŦā§ āĨ¤
    āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ –
type InterfaceName interface {
method1(arg1 type1, arg2 type2) returnType1
method2(arg3 type3) returnType2
// ...
}
type TypeName struct {
// fields
}
func (t TypeName) method1(arg1 type1, arg2 type2) returnType1 {
// implementation
}
func (t TypeName) method2(arg3 type3) returnType2 {
// implementation
}
 āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§, InterfaceName āĻšāϞ āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āϝāĻžāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ TypeName āĻšāϞ āĻāĻāĻāĻŋ Struct, āϝāĻž āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋ āĻŽā§āĻĨāĻĄāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāĻŦā§ āĨ¤
 āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻāϞ⧠āĻŦāĻŋāώā§āĻāĻŋ āĻā§āϞāĻŋā§āĻžāϰ āĻšā§ā§ āϝāĻžāĻŦā§ āĨ¤ āύāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻā§āĻž āĻšāϞ –
package main
import "fmt"
type Animal interface {
walk() string
bark() string
}
type Dog struct {
w string
b string
}
func (d Dog) walk() string {
return d.w
}
func (d Dog) bark() string {
return d.b
}
func main() {
var a Animal = Dog{"Dog is walking.....!!!", "Dog is barking....!!!"}
fmt.Println("!.....Dog......!")
fmt.Println(a.walk())
fmt.Println(a.bark())
}
   āĻāĻāĻāĻĒā§āĻ –
> go run interface.go
!.....Dog......!
Dog is walking.....!!!
Dog is barking....!!!
  āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§ –Â
- Animal āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āĻ°Â walk(), bark() āĻĻā§āĻāĻāĻŋ āĻŽā§āĻĨāĻĄ āĻāĻŦāĻ Dog Struct āĻāϰ w, b āĻĻā§āĻāĻāĻŋ āĻĢāĻŋāϞā§āĻĄ āϰā§ā§āĻā§āĨ¤Â
- Dog Struct, walk(), bark() āĻŽā§āĻĨāĻĄ āĻĻā§āĻāĻŋāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰ⧠string āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĻā§ āĻĢāϞ⧠Animal āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻ āĻšā§ā§ āĻāĻŋā§ā§āĻā§āĨ¤Â
- main() āĻĢāĻžāĻāĻļāύ⧠Animal āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ a āϤā§Â Dog Struct āĻāϰ āĻĢāĻŋāϞā§āĻĄ āĻā§āϝāĻžāϞ⧠āĻ ā§āϝāĻžāϏāĻžāĻāύ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ Â
[ā§Š.ā§Š.ā§Ē] āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ (Empty interfaces)
   Go āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻā§, āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§ âinterface{}â āĻāĻāĻžāϰ⧠āĻĒā§āϰāĻāĻžāĻļ āĻāϰāĻž āĻšā§ āĨ¤Â āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ⧠āĻā§āύ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰ āĻĨāĻžāĻā§ āύāĻž, āĻāĻāύā§āϝ āϝā§āĻā§āύ⧠āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžā§āĨ¤
 āύāĻŋāĻŽā§āύā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋ āϞāĻā§āώ āĻāϰāĻŋ –
package main
import "fmt"
type MyString string
type Rectangular struct {
width float64
height float64
}
func emptyInterface(i interface{}) {
fmt.Printf("Value given to emptyInterface function is of type '%T' with value %v\n", i, i)
}
func main() {
myString := MyString("My name is MD ABU SALMAN HOSSAIN")
rectangular := Rectangular{5.2, 7}
emptyInterface(myString)
emptyInterface(rectangular)
}
 āĻāĻāĻāĻĒā§āĻ –Â
> Go run emptyInterface.go
Value given to emptyInterface function is of type 'main.MyString' with value My name is
MD ABU SALMAN HOSSAIN
Value given to emptyInterface function is of type 'main.Rectangular' with value {5.2 7}
    āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§ –Â
- āĻāĻŽāϰāĻž MyString āĻāĻŦāĻ Rectangular Struct, āĻāĻ āĻĻā§āĻāĻŋ āĻāĻžāϏā§āĻāĻŽ āĻāĻžāĻāĻĒā§āϰ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋ āĨ¤Â
- āĻāĻāĻāĻŋ emptyInterface() āĻĢāĻžāĻāĻļāύ āϤā§āϰāĻŋ āĻāϰā§āĻāĻŋ āϝā§āĻāĻžāϤ⧠āĻāĻŽā§āĻĒāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āύāĻŋā§ā§āĻāĻŋ āĨ¤Â
- āĻāĻāĻ¨Â emptyInterface() āĻĢāĻžāĻāĻļāύāĻāĻŋ āϝā§āĻā§āύ⧠āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āϰāĻŋāϏāĻŋāĻ āĻāϰāĻŦā§āĨ¤Â
- āĻāĻŽāϰāĻž main() āĻĢāĻžāĻāĻļāύ āĻĨā§āĻā§ āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞā§Â āĻĻāĻŋā§ā§ emptyInterface āύāĻžāĻŽāĻ āĻĢāĻžāĻāĻļāύāĻā§ āĻāϞ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ āĻāĻžāĻāĻĒā§āϰāĻ āĻāĻāĻāĻĒā§āĻ āĻĻāĻŋā§ā§āĻā§ āĨ¤Â
[ā§Š.ā§Š.ā§Ģ] āĻŽāĻžāϞā§āĻāĻŋāĻĒāϞ āĻāύā§āĻāĻžāϰāĻĢā§āϏ (Multiple interfaces)
 āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āĻāĻāĻžāϧāĻŋāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āύāĻŋāĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§ –
- āĻāύā§āĻāĻžāϰāĻĢā§āϏ Shape āĻāĻŦāĻ Object āĻ āĻŽā§āĻĨāĻĄ āϏāĻŋāĻāύā§āĻāĻžāϰ āϝāĻĨāĻžāĻā§āϰāĻŽā§ Area() āĻ Volume() āϝāĻžāĻĻā§āϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāĻžāĻāĻĒ float64 āĨ¤Â
- Cylinder āĻāĻžāĻāĻĒā§āϰ āĻāĻāĻāĻž Struct āϰā§ā§āĻā§ āϝāĻžāϰ radius āĻāĻŦāĻ height āύāĻžāĻŽāĻ āĻĻā§āĻāĻŋ āĻĢāĻŋāϞā§āĻĄ āĻāĻā§āĨ¤Â
- āĻāĻā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏāĻā§ Cylinder Struct āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āĻā§āĨ¤Â
- main() āĻĢāĻžāĻāĻļāύ⧠Cylinder Struct āĻāϰ āĻāύāϏā§āĻā§āϝāĻžāύā§āϏ, Shape āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ shape āĻ āϰāĻžāĻāĻŋāĨ¤Â Â
- shape āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ⧠Cylinder āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻāϰāĻŋ āĻāĻŦāĻ cylinder āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ⧠āϤāĻž āϏā§āĻā§āϰ āĻāϰāĻŋāĨ¤ āĻĢāϞ⧠cylinder āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ āĻĨā§āĻā§ āĻāĻŽāϰāĻž Area() āĻ Volume(), āĻāĻā§ āĻŽā§āĻĨāĻĄ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦāĨ¤Â
- āĻāĻāύ āϏā§āĻ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ āĻĻā§āĻŦāĻžāϰāĻž Area() āĻ Volume() āĻŽā§āĻĨāĻĄāĻā§ āĻāϞ āĻāϰāĻž āĻšā§ā§āĻā§ āĨ¤
āύāĻŋāĻā§āĻ°Â āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĻā§āĻāĻž āϝāĻžāĻ –
package main
import (
"fmt"
"math"
)
type Shape interface {
Area() float64
}
type Object interface {
Volume() float64
}
type Cylinder struct {
radius float64
height float64
}
func (c Cylinder) Area() float64 {
return 2 * math.Pi * c.radius * (c.radius + c.height)
}
func (c Cylinder) Volume() float64 {
return math.Pi * c.radius * c.radius * c.height
}
func main() {
var shape Shape = Cylinder{3.2, 4.3}
cylinder := shape.(Cylinder)
fmt.Println("Area of shape of interface type Shape is ", cylinder.Area())
fmt.Println("Volume of object of interface type Object is ", cylinder.Volume())
}
āĻāĻāĻāĻĒā§āĻ –
> Go run MultipleInterface.go
Area of shape of interface type Shape is 150.79644737231007
Volume of object of interface type Object is 138.33060772286578
[ā§Š.ā§Š.ā§Ŧ] āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰāĻļāύ (Type Assertion)
Go-āϤā§, āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻšāϞ āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞā§āϰ āĻ āύā§āϤāϰā§āύāĻŋāĻšāĻŋāϤ āĻŽāĻžāύā§āϰ āϏāĻ āĻŋāĻ āĻāĻžāĻāĻĒāĻā§ āĻŦā§āϰ āĻāϰāĻžāϰ āĻāĻāĻāĻŋ āĻāĻĒāĻžāϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞā§āϰ āĻ āύā§āϤāϰā§āύāĻŋāĻšāĻŋāϤ āĻŽāĻžāύ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻžāĻāĻĒā§āϰ āĻāĻŋāύāĻž āϤāĻž āϝāĻžāĻāĻžāĻ āĻāϰāϤā§Â āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤Â
āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ –
value, ok := interfaceValue.(Type)
āĻāĻāĻžāύā§, interfaceValue āĻšāϞ āĻāĻāĻāĻŋ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻāĻŦāĻ Type āĻšāϞ āϏā§āĻ āĻāĻžāĻāĻĒ āϝāĻžāĻā§ āĻāĻŽāϰāĻž āĻ ā§āϝāĻžāϏāĻžāϰā§āĻ āĻāϰāϤ⧠āĻāĻžāĻāĨ¤ value āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϝāĻžāϤ⧠interfaceValue.(Type) āĻāϰ āĻŽāĻžāύ āϏā§āĻā§āϰ āĻāϰāϤā§Â āĻāĻŦāĻ ok āĻāĻāĻāĻŋ āĻŦā§āϞāĻŋāϝāĻŧāĻžāύ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϝāĻžāϤā§Â āĻ ā§āϝāĻžāϏāĻžāϰā§āĻ āĻāĻžāĻāĻĒ true āĻ āĻĨāĻŦāĻž false āĻāĻŋāύāĻž āϏā§āĻ āĻŽāĻžāύ āϏā§āĻā§āϰ āĻāϰāϤ⧠āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
 āĻāϞā§āύ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāύ āĻĻā§āĻā§ āύā§āĻā§āĻž āϝāĻžāĻāĨ¤
package main
import (
"fmt"
"math"
)
type Shape interface {
Area() float64
}
type Object interface {
Volume() float64
}
type Cylinder struct {
radius float64
height float64
}
func (c Cylinder) Area() float64 {
return 2 * math.Pi * c.radius * (c.radius + c.height)
}
func (c Cylinder) Volume() float64 {
return math.Pi * c.radius * c.radius * c.height
}
func main() {
var s Shape = Cylinder{3.2, 4.3}
c, ok := s.(Cylinder)
if ok {
fmt.Println("Area of shape of interface type Shape is ", c.Area())
fmt.Println("Volume of object of interface type Object is ", c.Volume())
} else {
fmt.Println("Itâs not a cylinder type ")
}
}
 āĻāĻāĻāĻĒā§āĻ –
> Go run MultipleInterface.go
Area of shape of interface type Shape is 150.79644737231007
Volume of object of interface type Object is 138.33060772286578
āĻāĻāĻžāύā§,s āĻšāϞ Shape āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϝāĻžāϤ⧠Cylinder Struct āĻā§ āĻāϏāĻžāĻāύ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ s.(Cylinder) āĻā§ c āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ⧠āϏā§āĻā§āϰ āĻāϰāĻž āĻšā§ā§āĻā§ āĻ āϰā§āĻĨāĻžā§ āĻāĻāĻžāύ⧠Cylinder Struct āĻāϰ āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϏāĻžāϰā§āĻ āĻāϰāĻž āĻšā§ā§āĻā§ s āĻ āĻāĻŦāĻ āϤāĻž c āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ⧠āĻāĻŦāĻ āĻ ā§āϝāĻžāϏāĻžāϰā§āĻ āĻāĻžāĻāĻĒ true āύāĻž false āϏā§āĻāĻž ok āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞā§Â āϰāĻžāĻāĻž āĻšā§ā§āĻā§āĨ¤ āϝāĻĻāĻŋ true āĻšā§ āϤāĻžāĻšāϞā§Â āĻāĻŽāϰāĻž c- āĻ Area() āĻāĻŦāĻ Volume() āĻŽā§āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ āĻāĻžāϰāĻŖ c āĻšāϞ Cylinder āĻāĻžāĻāĻĒā§āϰ āĻāĻāĻāĻŋ āĻāύā§āϏāĻā§āϝāĻžāύā§āϏ, āϝāĻž Cylinder āĻŽā§āĻĨāĻĄāĻā§āϞ⧠āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āĻāϰ āϝāĻĻāĻŋ false āĻšā§ āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻŋāύā§āĻ āĻšāĻŦā§ âItâs not a cylinder typeâāĨ¤Â