【Go学习】Go开发项目踩坑记录

JSON解析

使用

	err = json.Unmarshal(message, &clientConnectInfo)
	if err != nil {
		fmt.Println(err)
	}

进行json解析时,需要将结构体中的变量定义用大写字母开头,否则无法解析出内容,太坑了!!!

将两个socket数据连接loopback

就是说把两个连在本地的socket对接,做一个转发,google了一圈也没找到成熟的例子,不得已手撸了一个,ugly but work,如有更好的方法还请指教!

func loopBack(conn1 net.Conn, conn2 net.Conn) {
	go func() {
		Buffer1 := make([]byte, 8192)
		for {
			readLen1, _ := conn1.Read(Buffer1)
			if readLen1 == 0 {
				break // connection already closed by client
			}
			conn2.Write(Buffer1[:readLen1])
		}
	}()

	Buffer2 := make([]byte, 8192)
	for {
		readLen2, _ := conn2.Read(Buffer2)
		if readLen2 == 0 {
			break // connection already closed by client
		}
		conn1.Write(Buffer2[:readLen2])
	}
}

一个程序启动多个go程

大概如下是跑不起来的:

func main() {
	Init()
	go f1()
	go f2()
	f3()
	/*for {
		continue
	}*/
}

必须把注释掉的死循环加上,这么简单的坑硬是1个小时才看出来,debug半天,还是代码写少了啊!

go程序不知为何挂死

在goland下用debug模式运行程序,程序跑着跑着会卡住。具体表现为debug却能继续进行,点击暂停发现程序一直在main函数的主循环里,而其他之前运行的goroutine却卡住了,各种修改都不管用,最后发现用run直接运行就没有问题。。。让人头大

未完待续


版权声明:本文为weixin_42687826原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。