I used a Quagsire on my team my first time through Gold, and I've had a soft spot for it ever since. Its typing really comes in handy (only weak to grass, which isn't that common, and having a water type who is immune to electric is nice). It's also pretty bulky (particularly once it evolves), which is nice for training it. And it can be fairly versatile in-game with minimal cost investment (Surf later in the game, learns Earthquake naturally, and like most water types, you can slap an ice move on it fairly early on in the form of Ice Punch from the Goldenrod Department Store to take care of those pesky grass types it's weak to). It's a nice precursor to Swampert in the Water/Ground department.
I've always found Onix pretty tough to train. I haven't really tried it early on with the one in GSC, but in LeafGreen, I recall thinking that its attack stat was rather pitiful, all things considered. It also doesn't have enough HP or Special Defense to tank special attacks too well. That said, if you have access to trading, Steelix could be fun to use.
By contrast, I've always found the Geodude line easier to train. I still wouldn't call them easy, but they aren't terrible. And once Geodude evolves, things get a lot better. (Again, for final stage forms, you'll want to be able to trade locally to evolve it, so if you don't have access to that, Geodude might not be the best choice.)
If you're going with Quagsire, though, I don't know if you necessarily need a Rock/Ground type. You can have one if you want to, but there will be some overlap with Quagsire. (However, I say this as someone who had three water types on my Gold team, three Pokemon weak to electric attacks (one flying type and two water), three weak to grass (the water types), and two unevolved Pokemon, and I loved my team. So ultimately, if you want two ground types, go for it. Anything can work for in-game, except maybe a Magikarp who only knows Splash [and even then, Struggle plus regular potions could probably still take some stuff out].)