Gomes was born and raised in Petaluma, California. He was an all-league player while attending Casa Grande High School in Petaluma. In May 1997, at the age of 16, he was a passenger in a car accident that killed his best friend, Adam Westcott. Gomes, who was sitting next to Westcott in the back seat, was only slightly injured. Gomes has Westcott's initials tattooed on his right biceps.
After graduating from high school in 1999, Gomes went to Santa Rosa Junior College, where he hit .127 with 23 strikeouts in 55 plate appearances. He improved in his sophomore season, recording a .356 batting average with nine home runs. Gomes was then selected in the 18th round of the 2001 MLB Draft by the Tampa Bay Devil Rays. While he was in the rookie leagues, he was certified to become a personal trainer. His older brother, Joey Gomes, played in the minor and independent baseball leagues from 2002 to 2011.
Gomes suffered a heart attack on Christmas Eve 2002, the result of a clogged artery, despite being in playing condition (he reported having 8% body fat at the time). He ignored the symptoms for 27 hours, even sleeping through it one night, before going to the hospital after briefly blacking out and ceasing to breathe. His doctors said he would not have survived a second night. As a result of the heart attack, the Rays' team doctor had to keep nitroglycerin pills on hand in case Gomes suffered a second heart attack.
Gomes made his major league debut on September 12, 2003. He spent 2004 going back and forth between the Triple-A Durham Bulls and Tampa Bay. He told an MLB.com interviewer that when he was relegated back to Durham after a brief early stint in Tampa Bay in May 2005, he resolved that he would put up such an offensive onslaught that the Major League team would "get sick of looking at his face on the Tropicana Field scoreboard when the top Minor League performers were shown." He would have a .321 batting average with 14 home runs and 46 runs batted in (RBIs) in 45 games with the Bulls before returning to the Devil Rays for good in July.
After his return to Tampa Bay, Gomes became a starter for the club and became one of the club's most important players. On July 30, he became the first player in the franchise's history to hit three home runs in a single game, against the Kansas City Royals. For the year, Gomes hit 21 home runs in only 101 games and 348 at-bats. Projected over a full season, Gomes could have hit over 35 home runs. He became a fan favorite, and was known for his all-out hustle and long home runs; one went 474 feet and went over the Batter's Eye Restaurant behind the center field wall at Tropicana Field. He finished 3rd in voting for the 2005 American LeagueRookie of the Year award.
Gomes was figured to play a prominent role in the continued rebuilding and long range plans of the Tampa Bay Devil Rays. He started 2006 off by hitting a team-record 11 home runs in April. He hit the catwalk rings of Tropicana Field twice during a series with the Toronto Blue Jays in May; one landed in the B ring and rolled off to be caught, while the other hit the C ring and was ruled a home run. He struggled after his hot start, hitting nine home runs during the rest of the season and finishing with a .216 batting average. He attributed most of his problems to an injured shoulder, which hindered his hitting and his usually aggressive baserunning. He played through the injury until electing to have surgery on it in September. In addition to rehabilitating his shoulder, Gomes said in an MLB.com article that he wanted to lose weight over the offseason. He was listed at 205 pounds, but played the 2006 season weighing 250. He also mentioned possibly playing first base in 2007 for the Devil Rays, who then had Carl Crawford, Rocco Baldelli, and Delmon Young in their outfield.
During the first two months of 2007, Gomes was not given much playing time and his batting average was down to .184 when he was sent down to Durham again on May 25. He was recalled on June 14, and had an immediate impact as he saw increased playing time, though by the end of the season he again had tapered off. He went on to finish the season with a .244 batting average with 17 home runs and 49 RBIs while drawing 39 walks in 348 at-bats. He also compiled 126 strikeouts, a career high and his third straight season in which he had 100 or more strikeouts while playing in less than 120 games.
Gomes currently holds the Tampa Bay Rays club record for most hit by pitches, a total of 28. He achieved the team record when he was hit in the leg by Josh Beckett of the Boston Red Sox for his 26th on July 5, 2007.
During spring training in 2008, on March 12, Gomes rushed to the defense of Akinori Iwamura when the latter was spiked by Shelley Duncan of the New York Yankees. Gomes immediately rushed in from right field, flinging himself into Duncan as he was beginning to stand up. This emptied both teams' benches, as players and coaches ran onto the field. Gomes and Duncan were both ejected, as were two Yankees coaches. Due to his actions, he was suspended for two games, effective at the start of the season. Gomes commented that his actions were simply coming to the defense of his teammate, saying "I was taught in T-ball all the way up, to always protect a teammate's back. I just acted how I act. I wasn't really trying to get a shot in on him. I probably could have done a lot of things worse. But it is a baseball field and there's fans and kids watching. I just had to let him know that's not going to fly."
In the third game of a series against the Boston Red Sox on June 5, 2008, Gomes was involved in a bench clearing brawl after Coco Crisp charged the mound as a result of, among other events, being hit by a pitch. Replays of the incident show Gomes throwing punches at Crisp as he was already being shoved to the ground by several other Rays players. He was suspended for five games due to his role in the brawl. On August 6, Gomes was optioned to the Durham Bulls of the International League to create roster space for Ben Zobrist, and he was recalled after rosters expanded in September. Gomes was the only Rays batter to hit a homer while serving as a pinch hitter in 2008.
Gomes was non-tendered by the Rays following the 2008 season, making him a free agent.
On January 19, 2009, Gomes signed a minor league contract with the Cincinnati Reds. Despite a strong spring he was cut by the Reds on April 5. He was sent down to their AAA team in Louisville. He was called up by the Reds on May 21. He had his second three-homer performance on August 13, 2009 against the Washington Nationals. He was non-tendered a contract and became a free agent on December 12.
On August 25, 2010, Gomes hit his 100th home run against the San Francisco Giants in what turned out to be a four home run inning by the Reds. The Reds exercised the 2011 option on Gomes' contract on November 3, 2010.
On January 20, 2012 Gomes signed a one-year deal with the Oakland Athletics. Gomes had a good season with the team, hitting .262/.377/.491 with 18 HR and 47 RBIs in 99 games split mostly between designated hitter and left field. Gomes won the 2012 Catfish Hunter Award. The Athletics strongly considered re-signing Gomes for 2013, but their offer turned out to be about half of what the Red Sox would eventually offer.
On November 21, 2012, Gomes agreed to a two-year, $10 million deal with the Boston Red Sox. While in Boston, Gomes received the nickname "The Grinder", which was appointed to him by his teammates after watching his style of play.
In his first year in Boston, Gomes batted .247 with 13 home runs and 52 RBIs while accounting for 49 runs himself. During the ALDS and ALCS, the Red Sox were 6-0 when Gomes started in left field (hit .200 with two RBIs and 6 runs scored during this stretch).
In Game 4 of the World Series, Gomes broke a 0 for 9 slide by hitting a 387-foot, 3-run home run to help the Red Sox take the lead. He was not in the original lineup for that game but was added during batting practice after Red Sox outfielder Shane Victorino was scratched due to back pain. The Red Sox ended up winning the World Series that year.
On July 31, 2014, Gomes, along with pitcher Jon Lester, was traded to the Oakland Athletics for Yoenis Cespedes and a competitive balance draft pick in 2015. Gomes spoke highly of his time in Boston, stating "It was the best year and a half that anyone could imagine. Going from worst to first. It was humbling."
Gomes signed with the Atlanta Braves for the 2015 season after agreeing to a one-year contract worth $5 million. Gomes quickly became well liked by teammates and fans alike. He was featured in a limited edition shared "Freddie Hugs" bobble head along with first baseman, Freddie Freeman. The bobble head was part of a promotional giveaway before the Braves' July 21, 2015 game against the Los Angeles Dodgers. When a reporter for the local Fox Sports station asked Gomes for an opinion on the bobble head, he respond with, "I definitely wasn't at the meeting when this was decided, but I'll take it."
On August 28, 2015, Gomes made his pitching debut in a blowout 15-4 loss against the New York Yankees. He pitched the entire ninth inning, giving up two runs, including a home run to Chris Young, and recording his first strikeout.
Gomes has been known for his charity work in the Tampa Bay area, working with the Boys and Girls Clubs and many local schools. He participated in the Tampa Bay Rays "Shop with a Jock" where children from the Boys and Girls Clubs are invited to have lunch with the players and were each treated to a $100 shopping spree. He also participated in the "Take Jonny to School" program; the winner, 13-year-old Shamika Smith, brought him to A.J. Ferell Middle Magnet School. He has also sponsored a total of nine Little League Teams in his home town of Petaluma, California during his years in professional baseball. These teams range from T-ball to 12-year-olds. He is involved with Camp for a Cure, an annual charity baseball camp in Petaluma that has raised over $25,000 to date for cancer and lupus research. While in Arizona for spring training with the Reds, Gomes visited a local middle school classroom for the Extra Innings Foundation (extrainningsfoundation.org) where he shared his journey on how he has reached his goal and inspired youth to go after their dreams.