golang支持tls

本文介绍了Go官方不支持TLS,但可以通过go-tls库实现类似功能。go-tls利用上下文context避免参数传递,通过全局map和读写锁保证线程安全。文章探讨了其原理,并提醒注意潜在的兼容性、性能和维护问题,以及在协程间传递的限制。
摘要由CSDN通过智能技术生成

前言

golang官方默认是不支持tls(Thread Local Storage)的。支持tls的语言也不多,比如C++和GCC-C(gcc的c语言扩展,用于linux)。go官方拒绝实现tls,而为了解决tls问题,引入了上下文context包(闭包一定程度也是一种上下文)。通过上下文参数传递的方式来传递本地变量。这种方式好处就是显式上下文明确,坏处就是每个函数都要多一个上下文参数,传来传去的。黑客当然不会满足于此,于是乎一个哥们开源了go-tls
https://github.com/huandu/go-tls
代码不复杂,使用也比较简单。参考它的READ即可。

go-tls原理

简单介绍一下实现原理
它为每个协程定义了全局唯一的递增id,以及定义了一个全局的map用于存储每个协程的数据。map的key是协程的g结构地址,如此保证了数据是局部于协程的。由于map是全局的,多个协程会同时访问,属于临界区,因此添加了读写锁。如下定义

var (
	tlsDataMap  = map[unsafe.Poi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值