在mac上安裝Go語言初體驗

我將在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

sudo sh
./go4xcode.sh

也許有的,你會報如下這樣的錯誤: 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:

go run server.go

再執行client:

go run client.go

回過來看server端:

當client信息發送結束後,會在server段顯示 EOF結束的字符。

 

另外,執行go build xxx.go在當前目錄下會產生一個unit可執行文件,執行./xxx 便可執行文件。

相關文章
相關標籤/搜索