我將在mac os x的開發機器上安裝go語言的開發環境。 xcode
go語言運行包下載地址:http://code.google.com/p/go/downloads/list 服務器
這裏我選擇安裝 go1.0.3.darwin-amd64.pkg app
在mac上點擊安裝,運行包自動安裝到/usr/local/go中,這樣在命令終端就能夠運行go命令了 socket
這裏,我把go編輯器安裝到個人xcode應用程序中,因爲個人xcode裝的是4.x以上 tcp
在/usr/local/go/misc中,能夠看到有不少編輯器版本,這裏找到xcode目錄,裏面進入4,有個go4xcode.sh 編輯器
在終端中輸入: ui
也許有的,你會報如下這樣的錯誤: google
xcrun: Error: could not stat active Xcode path '/Volumes/Xcode/Xcode44-DP7.app/Contents/Developer'. (No such file or directory) spa
能夠查看這個解決方法:http://stackoverflow.com/questions/11456918/change-xcrun-developer-path .net
經過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:
再執行client:
回過來看server端:
當client信息發送結束後,會在server段顯示 EOF結束的字符。
另外,執行go build xxx.go在當前目錄下會產生一個unit可執行文件,執行./xxx 便可執行文件。