Do i need "CHECK CONSTRAINT" when i am using "WITH CHECK ADD CONSTRAINT"
The answer to both of your questions is really the same.  You are using a script generation tool.  It does what it's told to do.  Typically the second command is only needed if you are doing a WITH NOCHECK on the first one.  However it's included because the settings for the script generation component of SSMS told it to include it.

Here is a post I did on modifying those settings.

As far as the GO command.  This is a batch separator and is useful in breaking up a script both visually and for the computer.  It ends the scope of variables and affects how the parser looks at your script.  Again it's included because that is what the tool was told to do.