Empty Interface<\/strong> – It is an interface without any methods.<\/li><\/ul>\n\n\n\nThere are two cases for Method\/Function Overloading<\/p>\n\n\n\n
<\/p>\n\n\n\n
1.Different number of parameters but of the same type:<\/strong><\/p>\n\n\n\nAbove case can easily be handled using variadic functions. Notice in below code the parameters are of one type i.e. int.<\/strong><\/p>\n\n\n\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n fmt.Println(add(1, 2))\n fmt.Println(add(1, 2, 3))\n fmt.Println(add(1, 2, 3, 4))\n}\n\nfunc add(numbers ...int) int {\n sum := 0\n for _, num := range numbers {\n sum += num\n }\n return sum<\/code><\/pre>\n\n\n\nOutput:<\/strong><\/p>\n\n\n\n3\n6\n10<\/code><\/pre>\n\n\n\n<\/p>\n\n\n\n
2.Different number of parameters and of different types<\/strong><\/p>\n\n\n\nThis case can be handled using both variadic function and empty interface<\/p>\n\n\n\n
package main\n\nimport \"fmt\"\n\nfunc main() {\n handle(1, \"abc\")\n handle(\"abc\", \"xyz\", 3)\n handle(1, 2, 3, 4)\n}\n\nfunc handle(params ...interface{}) {\n fmt.Println(\"Handle func called with parameters:\")\n for _, param := range params {\n fmt.Printf(\"%v\\n\", param)\n }\n}<\/code><\/pre>\n\n\n\nOutput:<\/strong><\/p>\n\n\n\nHandle func called with parameters:\n1\nabc\nHandle func called with parameters:\nabc\nxyz\n3\nHandle func called with parameters:\n1\n2\n3\n4<\/code><\/pre>\n\n\n\nWe can also use a switch case to get the exact parameters and use them accordingly. See the below example.<\/p>\n\n\n\n
package main\n\nimport \"fmt\"\n\ntype person struct {\n name string\n gender string\n age int\n}\n\nfunc main() {\n err := addPerson(\"Tina\", \"Female\", 20)\n if err != nil {\n fmt.Println(\"PersonAdd Error: \" + err.Error())\n }\n \n err = addPerson(\"John\", \"Male\")\n if err != nil {\n fmt.Println(\"PersonAdd Error: \" + err.Error())\n }\n \n err = addPerson(\"Wick\", 2, 3)\n if err != nil {\n fmt.Println(\"PersonAdd Error: \" + err.Error())\n }\n}\n\nfunc addPerson(args ...interface{}) error {\n if len(args) > 3 {\n return fmt.Errorf(\"Wront number of arguments passed\")\n }\n p := &person{}\n \/\/0 is name\n \/\/1 is gender\n \/\/2 is age\n for i, arg := range args {\n switch i {\n case 0: \/\/ name\n name, ok := arg.(string)\n if !ok {\n return fmt.Errorf(\"Name is not passed as string\")\n }\n p.name = name\n case 1:\n gender, ok := arg.(string)\n if !ok {\n return fmt.Errorf(\"Gender is not passed as string\")\n }\n p.gender = gender\n case 2:\n age, ok := arg.(int)\n if !ok {\n return fmt.Errorf(\"Age is not passed as int\")\n }\n p.age = age\n default:\n return fmt.Errorf(\"Wrong parametes passed\")\n }\n }\n fmt.Printf(\"Person struct is %+v\\n\", p)\n return nil\n}<\/code><\/pre>\n\n\n\nNote:<\/strong> Wherever the arg is not passed it is substituted as default. <\/p>\n\n\n\nOutput:<\/strong><\/p>\n\n\n\nPerson struct is &{name:Tina gender:Female age:20}\nPerson struct is &{name:John gender:Male age:0}\nPersonAdd Error: Gender is not passed as string<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"Function\/Method Overloading means that that the same function\/method name can be used with a different number and types of parameters See this post for difference between function and method in Go –…<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[97,3,4,93,98],"class_list":["post-783","post","type-post","status-publish","format-standard","hentry","category-tech","tag-function","tag-go","tag-golang","tag-method","tag-overloading"],"yoast_head":"\n
Function\/Method Overloading in Golang (Alternatives\/Workaround) - Welcome To Golang By Example<\/title>\n \n \n \n \n \n \n \n \n \n \n \n \n \n\t \n\t \n\t \n