Explain Type Assertions in Go

I’m reading about type assertions x.(T) in The Go Programming Language and don’t understand them.

I understand that there are different scenarios:

  • T is a concrete type or an interface
  • One (asserted value?) or two (ok) values can be returned

This is what I don’t understand:

  • Why would I use them?
  • What exactly do they return?

I have also googled on the topic and still don’t understand.