GO only relates to SSMS - it isn't actual Transact SQL, it just tells SSMS to send the SQL statements between each
GO in individual batches sequentially.
; is a SQL statement delimiter, but for the most part the engine can interpret where your statements are broken up.
The main exception, and place where the
; is used most often is before a Common Table Expression Statement.