这个 hello world 主要是 server-client 形式的应用。 功能很简单, client 给 server 发送 ping/pong 的消息,server 回复 pong/ping 消息。
if strings.EqualFold(recieve[0:len(recieveDefault)],recieveDefault) {
	go send(conn,sendDefault)
  	}else if strings.EqualFold(recieve[0:len(sendDefault)],sendDefault) {
	go send(conn,recieveDefault)
  	}
 
package main
import (
    "fmt"
    "net"
    "strings"
    "time"
    "math/rand"
//    "reflect"
)
func main(){
	_, isClient,err := clientPre()
	
        if err != nil {
		server()
		return
	}
	if isClient {
		client()
		return
	}
	server()
}
func clientPre()(conn net.Conn, isClient bool, err error) {
    //打开连接:
    conn, err = net.Dial("tcp", "localhost:18080")
    if err != nil {
	isClient = false
        fmt.Println(err.Error())
        return
    }
    isClient = true
    conn.Close()
    return
}
func client(){
	sendContent := [2]string{"ping","pong"}
    conn, err := net.Dial("tcp", "localhost:18080")
    fmt.Println("client: ",conn.LocalAddr(),"server: ",conn.RemoteAddr()," ",rand.Intn(100)," ",sendContent[rand.Intn(100)%2])
	
	_,err = send(conn,sendContent[rand.Intn(100)%2])
	if err != nil {
        	fmt.Println(err.Error())
		return
	}
	
    doServerStuff(conn)
    return
}
func server() {
    listener, err := net.Listen("tcp", "0.0.0.0:18080")
    fmt.Println("server listen 18080")
    if err != nil {
        fmt.Println("开启端口错误,终止进程", 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) {
    count := 0
    recieveDefault := "ping"
    sendDefault := "pong"
    for {
	count += 1
	recieve,err := rev(conn)
        if err != nil {
            return 
        }
  	fmt.Printf("%d ", count)
  	if strings.EqualFold(recieve[0:len(recieveDefault)],recieveDefault) {
		go send(conn,sendDefault)
  	}else if strings.EqualFold(recieve[0:len(sendDefault)],sendDefault) {
		go send(conn,recieveDefault)
  	}
    }
}
func send(conn net.Conn, content string)(send string, err error){
	time.Sleep(100 * time.Millisecond)
        _, err = conn.Write([]byte(content))
	if err != nil {
		fmt.Println("发送错误.", err.Error())
		return
	}
	send = content
	fmt.Println("send", send)
	return
}
func rev(conn net.Conn)(recieve string, err error){
        buf := make([]byte, 512)
        _, err = conn.Read(buf)
        if err != nil {
	    fmt.Println("接收停止,原因:", err.Error())
            return 
        }
	recieve = string(buf)
  	fmt.Printf("recieving: %v ", recieve) 
	return
}