Example of Interface with Type Embedding and Method Overriding in GO language
An instance of catalog struct is created by providing values of the two objects that implemented the Information interface. The objects of Information type, are created with the Mobile type and the Shirts type. The value of the Details field contains the value of different types, the connecting factor of all objects is the Information interface.
// Example of Interface with Type Embedding and Method Overriding in GO language package main import( "fmt" ) /* The interface type Information is a contract for creating various Product types in a catalog. The Information interface provides three behaviors in its contract: General,Attributes and Inventory. */ type Information interface { General() Attributes() Inventory() } /* A struct Product is declared with fields for holding its state and methods implemented based on the behaviors defined in the Information interface. */ type Product struct { Name, Description string Weight,Price float64 Stock int } func (prd Product) General() { fmt.Printf("\n%s",prd.Name) fmt.Printf("\n%s\n",prd.Description) fmt.Println(prd.Price) } func (prd Product) Attributes(){ fmt.Println(prd.Weight) } //A struct Mobile is declared in which the type Product is embedded. type Mobile struct{ Product DisplayFeatures []string ProcessorFeatures []string } //Overrides for the Attributes Method for the Mobile struct func (mob Mobile) Attributes(){ mob.Product.Attributes() fmt.Println("\nDisplay Features:") for _, key := range mob.DisplayFeatures{ fmt.Println(key) } fmt.Println("\nProcessor Features:") for _, key := range mob.ProcessorFeatures{ fmt.Println(key) } } //A struct Shirts is declared in which the type Product is embedded. type Shirts struct{ Product Size,Pattern,Sleeve,Fabric string } //Overrides for the Attributes Method for the Shirts struct func (shrt Shirts) Attributes(){ fmt.Println("\nSpecification:") fmt.Println(shrt.Size) fmt.Println(shrt.Pattern) fmt.Println(shrt.Sleeve) fmt.Println(shrt.Fabric) } func (prd Product) Inventory(){ fmt.Println(prd.Stock) } // A struct named Catalog is declared to represent catalog of various products. // The type of Details field uses a slice of the Information interface type Catalog struct{ Name string Deatails []Information } func (c Catalog) CatalogDetails(){ fmt.Println("**************************************************\n") fmt.Printf("\nStore : %s \n",c.Name) for _, key:=range c.Deatails{ fmt.Println("===================Products==================") key.General() key.Attributes() key.Inventory() fmt.Println("=============================================") } } func main() { //Create an Instance of Mobile Type and Call Methods mobilePrd:=Mobile{ Product{ "Apple iPhone 6s (Rose Gold, 32 GB) (2 GB RAM)", "Handset, Apple EarPods with Remote and Mic, Lightning to USB Cable", 40999,143,10, }, []string{"2 GB RAM","4.7 inch Retina HD Display","12MP Primary Camera"}, []string{"32 GB ROM","4.7 inch Retina HD Display","5MP Front"}, } //Create an Instance of Shirts Type and Call Methods shirtPrd:=Shirts{ Product{ "Reebok Striped Men's Round Neck Grey T-Shirt", "Machine Wash as per Tag, Do not Dry Clean, Do not Bleach", 1124,400,25, }, "XL","Striped","Half Sleeve","Cotton", } //Create an Instance of Catalog Type category :=Catalog{ "Amazon", []Information{mobilePrd,shirtPrd}, } category.CatalogDetails() }
2018-06-22T16:00:00+05:30
2018-06-22T16:00:00+05:30
Golang Programs
Go Language Programs
Golang Program
Golang
Example and Solution