我將在mac os x的開發機器上安裝go語言的開發環境。
go語言運行包下載地址:http://code.google.com/p/go/downloads/list
這里我選擇安裝 go1.0.3.darwin-amd64.pkg
在mac上點擊安裝,運行包自動安裝到/usr/local/go中,這樣在命令終端就可以運行go命令了
這里,我把go編輯器安裝到我的xcode應用程序中,由於我的xcode裝的是4.x以上
在/usr/local/go/misc中,可以看到有很多編輯器版本,這里找到xcode目錄,里面進入4,有個go4xcode.sh
在終端中輸入:
./go4xcode.sh
也許有的,你會報以下這樣的錯誤:
xcrun: Error: could not stat active Xcode path '/Volumes/Xcode/Xcode44-DP7.app/Contents/Developer'. (No such file or directory)
可以查看這個解決方法:http://stackoverflow.com/questions/11456918/change-xcrun-developer-path
通過xcode-select命令來解決。
默認mac上安裝go運行包,不會添加GOROOT的環境變量,你必須加上一個GOROOT為/usr/local/go的目錄,這樣再執行go4xcode.sh的時候就不會出現錯誤。
現在引用一個socket通信樣例:
server
import (
" net "
" fmt "
" io "
)
const RECV_BUF_LEN = 1024
func main() {
listener, err := net.Listen( " tcp ", " 0.0.0.0:6666 ") // 偵聽在6666端口
if err != nil {
panic( " error listening: "+err.Error())
}
fmt.Println( " Starting the server ")
for {
conn, err := listener.Accept() // 接受連接
if err != nil {
panic( " Error accept: "+err.Error())
}
fmt.Println( " Accepted the Connection : ", conn.RemoteAddr())
go EchoServer(conn)
}
}
func EchoServer(conn net.Conn) {
buf := make([] byte, RECV_BUF_LEN)
defer conn.Close()
for {
n, err := conn.Read(buf);
switch err {
case nil:
conn.Write( buf[ 0:n] )
case io.EOF:
fmt.Printf( " Warning: End of data: %s \n ", err);
return
default:
fmt.Printf( " Error: Reading data : %s \n ", err);
return
}
}
}
client
import (
" fmt "
" time "
" net "
)
const RECV_BUF_LEN = 1024
func main() {
conn,err := net.Dial( " tcp ", " 127.0.0.1:6666 ")
if err != nil {
panic(err.Error())
}
defer conn.Close()
buf := make([] byte, RECV_BUF_LEN)
for i := 0; i < 5; i++ {
// 准備要發送的字符串
msg := fmt.Sprintf( " Hello World, %03d ", i)
n, err := conn.Write([] byte(msg))
if err != nil {
println( " Write Buffer Error: ", err.Error())
break
}
fmt.Println(msg)
// 從服務器端收字符串
n, err = conn.Read(buf)
if err !=nil {
println( " Read Buffer Error: ", err.Error())
break
}
fmt.Println( string(buf[ 0:n]))
// 等一秒鍾
time.Sleep(time.Second)
}
}
先執行server:
再執行client:
回過來看server端:
當client信息發送結束后,會在server段顯示 EOF結束的字符。
另外,執行go build xxx.go在當前目錄下會產生一個unit可執行文件,執行./xxx 即可執行文件。