我将在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 即可执行文件。