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

  • 相关阅读:
    【大数据云原生系列】大数据系统云原生渐进式演进最佳实践
    Apache Flink on K8s:四种运行模式,我该选择哪种?
    Istio 运维实战系列(2):让人头大的『无头服务』-上
    istio 常见的 10 个异常
    Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
    腾讯会议大规模使用Kubernetes的技术实践
    腾讯云推出云原生etcd服务
    Regionals 2014 Asia
    HDU1754 I Hate It splay
    HNOI2002 营业额统计 splay
  • 原文地址:https://www.cnblogs.com/liping13599168/p/2760316.html
Copyright © 2020-2023  润新知