在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 即可執行文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM