My understanding is that you could keep the sql.Db connection as a package-level variable (hence, one per instance), since this object is concurrently safe to access from multiple go routines or requests (this is how I'm handling connections at the moment).
The issue is when App Engine scales your app up to have more than 12 instances, and that would generate more connections than you can handle in the current tier. I believe that the 13th instance will not be able to open a new connection and you will get a dial error.
You can fix the upper bound for instance startup using basic scaling. Another approach is to release the connections instead of retain them, as recommended somewhere by App Engine docs. I'm not sure about latency for opening connections using the cloudsql proxy (which App Engine uses under the hood to talk to both SQL generations).
Either way, due to the nature of how the SQL connections are managed, you always have an upper bound of connections for the database tier. You can increase it by upgrading your tier, which would be a necessity either way because more connections may indeed require more CPU/memory/IOPS. However, this is non-automatic process, and very application specific.