在mac上安装Go语言初体验

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值