We know that interfaces are used to store a set of methods without implementation. In Go, we can also create interfaces without any methods, known as empty interfaces. For example,
interface {}
Here, we have created an empty interface without any methods.
Variable of Empty Interface in Golang
In Go, we can create variables of the empty interface type. For example,
package main
import "fmt"
func main() {
// variable of empty interface type
var a interface {}
fmt.Println("Value:", a)
}
Output
Value: <nil>
Here, we have created a variable of type empty interface. When we print the variable, we get nil
as output.
Empty Interface to Pass Function Argument of Any Type
Normally in functions, when we pass values to the function parameters, we need to specify the data type of parameters in a function definition.
However, with an empty interface, we can pass parameters of any data type. For example,
package main
import "fmt"
// empty interface as function parameter
func displayValue(i interface {}) {
fmt.Println(i)
}
func main() {
a := "Welcome to codemy"
b := 20
c := false
// pass string to the function
displayValue(a)
// pass integer number to the function
displayValue(b)
// pass boolean value to the function
displayValue(c)
}
Output
Welcome to codemy 20 false
In the above example, we have used an empty interface i
as the parameter to the displayValue()
function.
Now the same function works for any type of parameters (string,numeric, boolean).
Go Empty Interface to Pass Any Numbers of Arguments
We can also use an empty interface to pass any number of arguments to the function definition. For example,
package main
import "fmt"
// function with an empty interface as its parameter
func displayValue(i... interface {}) {
fmt.Println(i)
}
func main() {
a := "Welcome to codemy"
b := 20
c := false
// function call with a single parameter
displayValue(a)
// function call with 2 parameters
displayValue(a, b)
// function call with 3 parameters
displayValue(a, b, c)
}
Output
[Welcome to codemy 20 false 20 40 Hi again]
In the above example, we have used an empty interface i as the parameter to the displayValue()
function.
func displayValue(i... interface{})
Now the same function works for any number of parameters.