Партиционирование - логическая таблица разбита на партиции внутри одной СУБД. Шардирование - данные на разных серверах (разные инстансы БД). В Go при шардировании приложение выбирает шард по ключу (user_id, hash(id) % N) и обращается к нужному *sql.DB. Транзакции и JOIN между шардами в приложении не поддерживаются - делают в коде или избегают. Партиционирование прозрачно для приложения - один DSN.
shard := db.shards[userID%len(db.shards)]
return shard.QueryContext(ctx, "SELECT ... WHERE user_id = $1", userID)