【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直接运行就没有问题。。。让人头大

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值