Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13321
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2019-09-05 14:25
文章分类

全部博文(6)

文章存档

2019年(6)

我的朋友

分类: LINUX

2019-09-08 23:49:53

首先go提供了自己的编程手册:godoc,安装好golang,在命令行中输入:godoc -http=:6060
开启godoc文档的web服务,打开浏览器,输入即可进入页面。
可以看到这里列出了标准库和一些非标准库:

下面是编程手册给出的例子:

下面是一个服务器的简单的例子:
service.go:

点击(此处)折叠或打开

  1. package main


    import (
        "fmt"
        "net"
        "strings"
        "strconv"
        "math"
    )


    func main() {
        fmt.Println("Starting the server ...")
        
        listener, err := net.Listen("tcp", "localhost:56666")
        if err != nil {
            fmt.Println("Error listening", err.Error())
            return
        }


        for {
            conn, err := listener.Accept()
            if err != nil {
                fmt.Println("Error accepting", err.Error())
                return
            }
            go doServerStuff(conn)
        }
    }


    func doServerStuff(conn net.Conn) {
        for {
            buf := make([]byte, 512)
            lens, err := conn.Read(buf)
            
            strRev :=string(buf[:lens]);
            fmt.Println("Rev:"+strRev)
            strs := strings.Split(strRev, ",")
            if(len(strs)==2){
              a,err := strconv.ParseFloat(strs[0],32)
              b,err := strconv.ParseFloat(strs[1],32)
              fmt.Println(a,b)
              
              if err != nil {
                  fmt.Println("Error conv", err.Error())
                  return
              }
              c := math.Sqrt(math.Pow(a, 2)+math.Pow(b, 2))
              str_c := strconv.FormatFloat(c,'f',-1,32)
              conn.Write([]byte(str_c))
              
              
            }
           
            if err != nil {
                fmt.Println("Error reading", err.Error())
                return
            }
            fmt.Printf("Received datax: %v", string(buf[:lens]))
        }
    }

       第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
大致过程为:
1.使用net.Listen()创建listener来监听端口。
2.轮询listener.Accept()是否有客户端链接接入。
3.如果有客户端链接过来,则启动新的协程处理客户端连接(go doServerStuff)。
客户端测试代码如下:

点击(此处)折叠或打开

  1. package main

  2. import (
  3.     "fmt"
  4.     "net"
  5.     "os"
  6.     "strings"
  7. )

  8. func main() {
  9.    
  10.     conn, err := net.Dial("tcp", "localhost:56666")
  11.     if err != nil {
  12.         fmt.Println("Error dialing", err.Error())
  13.         return
  14.     }

  15.    arg_num := len(os.Args)
  16.    var i int = 0
  17.    var send string = ""
  18.    for i=1; i<arg_num; i++{
  19.      curr := os.Args[i]
  20.      fmt.Println("arg="+os.Args[i])
  21.        send +=curr
  22.        send +=","
  23.    }
  24.    send = strings.TrimSuffix(send, ",")
  25.    sends := strings.Trim(send, "\r\n")
  26.    fmt.Println("send:"+sends);
  27.    _, err = conn.Write([]byte(sends))
  28.    
  29.    buf := make([]byte, 512)
  30.    theLen, err := conn.Read([]byte(buf))
  31.    
  32.    fmt.Println("recv:"+string(buf[:theLen]));
  33. }
阅读(710) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~