首先go提供了自己的编程手册:godoc,安装好golang,在命令行中输入:
godoc -http=:6060
开启godoc文档的web服务,打开浏览器,输入即可进入页面。
可以看到这里列出了标准库和一些非标准库:
下面是编程手册给出的例子:
下面是一个服务器的简单的例子:
service.go:
-
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)。
客户端测试代码如下:
-
package main
-
-
import (
-
"fmt"
-
"net"
-
"os"
-
"strings"
-
)
-
-
func main() {
-
-
conn, err := net.Dial("tcp", "localhost:56666")
-
if err != nil {
-
fmt.Println("Error dialing", err.Error())
-
return
-
}
-
-
arg_num := len(os.Args)
-
var i int = 0
-
var send string = ""
-
for i=1; i<arg_num; i++{
-
curr := os.Args[i]
-
fmt.Println("arg="+os.Args[i])
-
send +=curr
-
send +=","
-
}
-
send = strings.TrimSuffix(send, ",")
-
sends := strings.Trim(send, "\r\n")
-
fmt.Println("send:"+sends);
-
_, err = conn.Write([]byte(sends))
-
-
buf := make([]byte, 512)
-
theLen, err := conn.Read([]byte(buf))
-
-
fmt.Println("recv:"+string(buf[:theLen]));
-
}
阅读(710) | 评论(0) | 转发(0) |