The short answer is: "To keep the language simple."
Go as a language only allows methods to be defined on types that are in the same package, but because string (like other builtin types) is implemented in the language itself, there is no way to add methods to it, without complicating the language / compiler.
It's also partly, because of how Go was designed.
See this mail from Rob Pike (one of the creators of Go) for more information:
Go does not have methods on basic types because the designers of the
language did not want methods defined for basic types, in part because
of the knock-on effect they might have on interfaces. I believe we are
all still comfortable with that decision. Others may feel differently.
-rob
And this one too:
We simply didn't understand what the implications would be; there's
nothing to explain. Go was designed with caution.
In that vein, look at the size of the strings library. Making all that
functionality methods on the basic type would, as Andrew said,
complicate the language. Why complicate the language with such trivial
things when it can be achieved by a library, which is more
maintainable, easier to extend, and more flexible? The language is
much simpler the way things are.
-rob
stringwould have methods, you would still be able to access those methods on your custom types by simply casting your custom type tostring. See this example on Go Playground.