Vivasoft-logo

[ā§Š.ā§Š] āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ (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”āĨ¤Â