# Use [winstrap](https://github.com/golang/winstrap)

Download the latest version of winstrap.exe from the [winstrap](https://github.com/golang/winstrap) page and run it.

It will download some installers to your desktop, which you should run. Just click through; all the defaults are fine.

Then it will check out Go and place it in c:\Users\%USER%\goroot and build it.

That's it.


---

Older (deprecated?) instructions follow.


---


# Install MinGW/MSYS

Download and save the latest version of the automated MinGW installer executable (` exe `) file from SourceForge.

http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/

Open and run the saved automated MinGW installer executable file, which is named ` mingw-get-inst-yyyymmdd.exe `, where ` yyyymmdd ` is the version date stamp. For example, ` mingw-get-inst-20110530.exe `.

The MinGW Setup Wizard window will open with the title "Setup - MinGW-Get". Except for the following, accept the setup defaults, unless it's necessary to change them.

For Repository Catalogues, check the Download latest repository catalogues button.

For Select Components, the MinGW Compiler Suite, the C Compiler box is automatically checked. Scroll down to the bottom of the list and check the MinGW Developer Toolkit box, which includes the MSYS Basic System.

For Ready to Install, review and verify the installation settings, which should look similar this:
```
    Installing:
        mingw-get
        pkginfo
        C Compiler
        MSYS Basic System
        MinGW Developer Toolkit 
    Downloading latest repository catalogues 
    Destination location:
        C:\MinGW 
```
When the installation settings are correct, Install.

The installation loads the package installation catalogues and downloads and installs the files. The installation may take some time, largely depending on the download speed.

The MSYS terminal window may be opened by opening and running the ` C:\MinGW\msys\1.0\msys.bat ` batch file.

# Build

```
hg clone https://code.google.com/p/go/
cd go\src
all.bat
```

# 64-bit Notes

  1. Ensure you are able to compile a working 32-bit Go first.
  1. Grab the latest zip from http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/ and extract it over the MinGW directory, so that for example the .exe files end up in the same location as the 32-bit ones.
  1. Replace ` gcc.exe ` and ` ar.exe ` with their 64-bit counterparts.
  1. Set ` GOARCH=amd64 ` and away you go!

# Alternative Strategy

Install http://tdm-gcc.tdragon.net/

Install Python 2.x.

Install Mercurial for Python 2.x.

Make a "godev.bat" file on your desktop with:

```
set GOROOT=c:\go
set GOPATH=c:\you\gopath
set PATH=%PATH%;%GOROOT%\bin;C:\Python27;C:\Python27\Scripts
cd %GOROOT%\src
CMD
```

Then double-click and type "all.bat".  The codereview extension should work too (test with "hg pq")