Old English gan "to go, advance, depart; happen; conquer; observe," from West Germanic *gai-/*gæ- (cf. Old Saxon, Old Frisian gan, Middle Dutch gaen, Dutch gaan, Old High German gan, German gehen), from PIE *ghe- "to release, let go" (cf. Sanskrit jihite "goes away," Greek kikhano "I reach, meet with"), but there is not general agreement on cognates.
The Old English past tense was eode, of uncertain origin but evidently once a different word (perhaps connected to Gothic iddja); it was replaced 1400s by went, formerly past tense of wenden "to direct one's way" (see wend). In northern England and Scotland, however, eode tended to be replaced by gaed, a construction based on go. In modern English, only be and go take their past tenses from entirely different verbs.
The word in its various forms and combinations takes up 45 columns of close print in the OED. Verbal meaning "say" emerged 1960s in teen slang. Colloquial meaning "urinate or defecate" attested by 1926. Go for broke is from 1951, American English colloquial; go down on "perform oral sex on" is from 1916. That goes without saying (1878) translates French cela va sans dire. As an adjective, "in order," from 1951, originally in aerospace jargon.