static fulfilment != semantic fulfilment.
In practice, there is no language that can save you from people with malicious intent to confuse you.
In practice, this is rarely an issue.
When a developer makes a class implement an interface s/he signing a contract thus validating assumptions.
When a type in Go matches an interface, it happens by chance.
Whether or not the function/method's author typed the words "implements Foo" has absolutely no impact on this.
static fulfilment != semantic fulfilment.