Issue
Why would you create a type with empty struct?
type FrontierSigner struct{}
What is it good for?
Solution
Empty struct struct{}
is realized in a special way in Go.
-
It’s a smallest building block in Go. It’s size is literally 0 bytes.
-
If it has zero size. you may create a slice of 1000’s empty structures and this slice will be very tiny. Because really Go stores only a number of them in the slice but not them itself. The same story with channels.
-
All pointers to it always point to the same special place in memory.
-
Very useful in channels when you notify about some event but you don’t need to pass any information about it, only a fact. Best solution is to pass an empty structure because it will only increment a counter in the channel but not assign memory, copy elements and so on.
Sometime people use Boolean values for this purpose, but it’s much worse. -
Zero size container for methods. You may want have a mock for testing interfaces. Often you don’t need data on it, just methods with predefined input and output.
-
Go has no
Set
object. Bit can be easily realized as amap[keyType]struct{}
. This way map keeps only keys and no values.
Answered By – Eugene Lisitsky
Answer Checked By – Pedro (GoLangFix Volunteer)