帮忙看一下代码的执行乱序

ugenehan · · 2406 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

输入内容,并将输入的内容传输至网络服务端。但是目前的代码,cmd.go中的Execmd函数,从打印的日志来看,dealConn函数输入内容后会执行2次。 main.go ```go package main import ( "fmt" "github.com/client/cmd" "net" "os" "github.com/spf13/cobra" ) const version = "1.0.0" var address string var versionFlag bool var conn net.Conn var RootCmd = &cobra.Command{ Use: "client", RunE: execmd, } func execmd(c *cobra.Command, args []string) error { if versionFlag { fmt.Printf("client version %s\n", version) return nil } var err error conn, err = net.Dial("tcp", address) if err != nil { fmt.Println("error to connect, ", err) return err } fmt.Printf("connect to %s\n", address) return nil } func init() { RootCmd.Flags().BoolVarP(&versionFlag, "version", "v", false, "show version") RootCmd.Flags().StringVarP(&address, "addr", "d", "127.0.0.1:25610", "the host address,like 127.0.0.1:10000") } func main() { defer func() { conn.Close() }() if err := RootCmd.Execute(); err != nil { os.Exit(1) } go cmd.Execmd(conn) select {} } ``` cmd.go ```go package cmd import ( "bufio" "fmt" "time" "net" ) func Execmd(conn net.Conn) (err error) { time.Sleep(3 * time.Second) var input string for { fmt.Printf("[%s]#", conn.RemoteAddr().String()) fmt.Scanf("%s", &input) err = dealConn(conn,input) if err != nil { fmt.Printf("error to dealConn %s\n", err) return } fmt.Println("return from dealConn.") } return nil } func dealConn(conn net.Conn,input string) (err error) { fmt.Println("begin to exec cmd.") //发送命令 conn.Write([]byte(input)) conn.Write([]byte("\n")) //处理接受的结果 reader := bufio.NewReader(conn) msg, err := reader.ReadString('\n') if err != nil { fmt.Println("response error\n") return err } fmt.Println("response:", string(msg)) fmt.Println("exec cmd end.") return nil } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2406 次点击  
加入收藏 微博
2 回复  |  直到 2017-10-25 06:17:55
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传