我將在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
在終端中輸入:
sudo 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
package main
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
package main
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:
go run server.go
再執行client:
go run client.go
回過來看server端:
當client資訊發送結束後,會在server段顯示 EOF結束的字元。
另外,執行go build xxx.go在目前的目錄下會產生一個unit可執行檔,執行./xxx 即可執行檔。