|
|
|
|
|
by majewsky
3146 days ago
|
|
A possible solution is to have a separate (otherwise unused) package in your codebase with just a test in it: //compile_test.go
func TestThatThisModuleCompiles(t* testing.T) {}
//list of "type implements interface" tests
var _ mymodule.MyInterface = myothermodule.MyStruct{}
...
Then you just ensure that `go test` is run, e.g. by the CI. |
|
The interface issue has been on my mind for quite sometime. I had thought maybe declaring all interfaces in seperate files might help with the structure (like having the definitions in a header file in C), but the Go standard library does not use this approach. Interfaces and implementations are scattered across files and modules. Maybe I'm being too clever and we all know that Rob Pike always says that programmers should not be too clever. Maybe I should loosen up a bit, and treat Golang more like a pragmatic language. They did the best they could and produced a wonderful language. Any additional feature such as generics and explicit implements statements would have made the language much more complex.