Goffin took the first set 6-2 with an impressive performance that blew Djokovic away and left the 2016 French Open champion struggling.
However Djokovic regrouped really well in the second set and he quickly made sure that he drew level at 1-1.
The final set proved to be most thrilling with Djokovic saving four match points before Goffin secured a deserved win.
Djokovic was serving at 4-3 but Goffin won the game to love to roar back into contention, taking every opportunity to unsettle the French Open champion.
In the 12th game, Goffin opened a 40-15 lead on Djokovic's serve but the 12-times grand slam champion saved four match points before netting a forehand to lose to the Belgian for the first time in six meetings.
He will face the winner of the match between Rafa Nadal and Diego Schwartzman in the semi-finals.
Djokovic's defeat comes the day after world number one Andy Murray was knocked out by Albert Ramos-Vinolas.
Earlier in the day Ramos-Vinolas followed up his victory over Murray with a 6-2 6-7 (5) 6-2 defeat of Croatian fifth seed Marin Cilic.
France's Lucas Pouille made a fast start before being made to work harder by Uruguay's Pablo Cuevas, eventually winning 6-0 3-6 7-5.
Additional reporting via Reuters
Read the original article on Eurosport: Goffin upsets Djokovic to make Monte-Carlo semi-finals