Goran Milovic was promoted from RNK Split's youth academy to their first team in 2008. He was a member of the first team for a long time without making an official appearance for the club, often playing for the reserve side when there was no space in the first team for him and it was not until 31 July 2010 that he debuted for the senior side. He was immediately made a regular in the starting eleven that season and in the five months between his debut and his transfer to local rivals Hajduk Split, he made 20 appearances for the club, scoring one goal.
He made a move across the city of Split to the historic club Hajduk in a transfer where Hajduk paid no compensation for his services. Hajduk managed Krasimir Balakov played him in every game for the rest of the season after he made his debut against former club RNK Split. When new manager Mišo Krstičević came in, Goran remained a vital part of the defense, making 26 appearances in the 2012–13 season. The 2013–14 season under Igor Tudor was his biggest yet. He made 40 appearances in all competitions and was even handed the captain's armband on four occasions. He was also named in the team of the season by many Croatian media outlets.
On 2 February 2016, Milović moved to China League One side Chongqing Lifan in an €800,000 deal. He signed a three and a half year deal with the club, worth approximately €500k a year. He made his debut for the club on 6 March 2016 in a 1-0 victory against Guangzhou Evergrande. On 12 February 2018, Milović was loaned to Osijek until the end of the season, with a buying option.
KV Oostende
On 13 June 2018, Milović signed a two-year contract with Belgian First Division A club KV Oostende. Chongqing Lifan confirmed on the next day that Milović had terminated the contract with the club and joined KV Oostende on a free transfer.
International career
In October 2015, he received a first call-up for the senior national team for a friendly against Russia and on that match, on 17 November 2015, he made a senior national team debut as a substitute.