This is because type checking is the least impactful part of generics. As you said, that is a solved problem. The reason Go took so long thinking about generics has to do with their code generation. There are steep tradeoffs in compilation vs run time as well as compiler complexity and language complexity in general. Go's purpose was to be very fast to compile and run, born in a company where compile times for several projects run for hours even with massive parallelization.
There is very good reason that Go's initial compromise was to use built-ins for a small number of highly useful generics like arrays and maps.
There is very good reason that Go's initial compromise was to use built-ins for a small number of highly useful generics like arrays and maps.