golang中的unsafe包详解
从golang的定义来看,unsafe 是类型安全的操作。顾名思义,它应该非常谨慎地使用; unsafe可能很危险,但也可能非常有用。例如,当使用系统调用和Go结构必须具有与C结构相同的内存布局时,您可能别无选择,只能使用unsafe。关于指针操作,在unsafe包官方定义里有四个描述:
任何类型的指针都可以被转化为Pointer
Pointer可以被转化为任何类型的指针
uintptr可以被转化为Pointer
Pointer可以被转化为uintptr
额外在加上一个规则:指向不同类型数据的指针,是无法直接相互转换的,必须借助unsafe.Pointer(类似于C的 void指针)代理一下再转换也就是利用上述的1,2规则。
举例:
1234567func Float64bits(f float64) uint64 { // 无法直接转换,报错:Connot convert expression of type *float64 to type *uint64 // return *(*uint64)(&f) // 先把*float64 转成 Po ...
go refilect官方文档
介绍计算机中的反射是指程序通过类型检查来检查其自身的结构的能力;这是一种元编程形式。但它也是一个巨大的困扰。
本文试图通过解释Go语言中的反射如何工作来澄清这些问题。每种语言的反射模型都是不同的(许多语言根本不支持反射),但本文是关于Go语言的,因此在本文的剩余部分中,“反射”这个词应该被理解为“Go语言中的反射”。
注:2022年1月增加:本文是在2011年编写的,比Go语言中的参数化多态(即通用类型)发展要早。虽然由于该语言开发中的发展,本文中的重要内容没有变化,但已在一些地方进行了微调,以避免混淆熟悉现代Go语言的人。
类型和接口由于反射是建立在类型系统之上的,让我们从Go语言中类型的基础知识开始。
Go语言是静态类型的。每个变量都有一个静态类型,也就是在编译时已知和固定的一个类型:int、float32、*MyType、[]byte等等。如果我们声明
1234type MyInt intvar i int var j MyInt
那么i的类型为int,j的类型为MyInt。变量i和j具有不同的静态类型,并且尽管它们具有相同的基础类型,但不能在没有转换的情况下互相赋值。
类 ...
go context包官方文档
Go并发模式:Context
在Go服务器中,每个传入的请求都在它自己的goroutine中处理。请求处理程序通常启动附加的goroutine来访问后端,例如数据库和RPC服务。在处理请求的一组goroutine通常需要访问请求特定的值,例如终端用户的身份,授权令牌和请求的截止时间。当请求被取消或超时时,所有正在处理该请求的goroutine应该快速退出,以便系统可以回收它们正在使用的任何资源。
在Google中,我们开发了一个Context包,使得在处理请求的所有涉及的goroutine之间跨API边界传递请求范围的值,取消信号和截止时间变得容易。该包作为context公开可用。本文介绍了如何使用该包并提供一个完整的工作示例。
ContextContext包的核心是Context类型:
1234567891011121314// Context 在 API 边界上携带截止时间、取消信号和请求范围的值。它的方法可以同时被多个 goroutine 安全使用。type Context interface { // Done 返回一个通道,该通道在此上下文被取消或超时时关闭。 ...
Golang 位运算
二进制表示从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态。
例如 用8位存储
123450: 00000000 1: 00000001 2^02: 00000010 2^13: 00000011 2^1 + 2^04: 00000100 2^2
可以使用如下公式 f(a) = 2^(x-1) x为位数
位运算从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。
123a := 3b := 6c := 9
计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加
12343: 0 0 0 0 0 0 1 17: 0 0 0 0 0 1 1 1————————————————————10: 0 0 0 0 1 0 1 0
可以如下表示
1233 = 2^1 + 2^07 = 2^2 + 2^1 + 2^010 = 2^3 + 2^1
位 ...
微信promise和async await
在微信小程序项目中,接触到了promsie,参考其他文章,深入学习了promsie的原理及用法。学习异步编程。
在JavaScript的世界中,所有代码都是单线程执行的。
由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。
异步执行可以用回调函数实现:
123456function callback() { console.log('Done');}console.log('before setTimeout()');setTimeout(callback, 1000); // 1秒钟后调用callback函数console.log('after setTimeout()');
观察上述代码执行,在Chrome的控制台输出可以看到:
1234before setTimeout()after setTimeout()(等待1秒后)Done
可见,异步操作会在将来的某个时间点触发一个函数调用。
AJAX就是典型的异步操作。以上一节的代码为例:
12345678 ...
雷军第二次年度演讲-2021年度:最好的投资,就是投资自己
雷军年度演讲——“我的梦想,我的选择”,如约而至。
8月10日晚上19:30,小米十一周年,雷军在两个多小时的演讲中,首次揭秘他最艰难的10个选择,向大家分享了这些年来,小米在追寻梦想的路上凭什么一路前行,又是如何一步一步成长的。
小米公司七年前,乌镇世界互联网大会上,意气风发的雷军曾当众表达小米的梦想:“五到十年,小米要做到全球第一。” 在场的苹果公司高级副总裁布鲁斯·塞维尔说:“It’s easy to say, it’s much more difficult to do。”台下观众笑成一片。
7年后的今天,小米手机销量超过苹果,首次成为全球第二,并成为首个登顶欧洲市场的中国品牌。 “真的没有想到,7年后的今天,我们超过苹果,首次成为了全球第二!”他说。
2021第二季度,据Canalys等第三方研究机构报告,小米手机出货量达5310万,同比增长86.6%,以17%的份额超越苹果,首次排名全球第二。
同时,根据国际调研公司Strategy Analytics发布的最新报告,欧洲市场小米以25.3%的市场份额,超越三星和苹果成为欧洲销量第一的手机品牌。目前,小米已在22个国家和地 ...
雷军第一次演讲-10周年演讲全文:豁出去,干
来源:腾讯科技
8月11日,小米集团董事长兼CEO雷军在小米北京总部举行了一场主题为《一往无前》的小米十周年演讲。
雷军在一个半小时的演讲上,讲述了小米创业十年来不为人知的故事,包括小米创立的初衷、与董明珠打赌、经营理念、上市的故事等等。
谈到创业之初组建团队,雷军表示找人不是三顾茅庐,是三十次顾茅庐。
雷军也自嘲干了不少蠢事,比如和董明珠的十亿赌局,雷军也正式承认小米的确输了。“敢跟格力去比本质上说明我们膨胀了”。
雷军最后表示,他最自豪的不是上市。而是三件事, 小米和所有同行一起推动了智能手机的普及、小米的生态链模式带动了100个行业的变革、小米甚至改变了很多人的命运。
以下为雷军演讲速记全文(腾讯科技根据速记整理,未经小米官方确认):
今年是小米十周年,我们原来准备了极为盛大的几万人的大型庆典活动,因为疫情只能取消了。但是大家想一想,十周年还是一个很重要的日子,生活还需要一些仪式感,生活更需要我们积极地去面对。
最近这段时间我想了想以后,我决定办一场演讲,来纪念这个重要的日子。同时,也对所有关心和支持小米的朋友做一次完整的总结和汇报。
梦想的开端
十年前我和一群小伙伴一起 ...
雷军2022年度最新演讲:熬过绝望低谷,你便无人能敌
内容来源:2022年8月11日,2022雷军年度演讲。
分享嘉宾:雷军,小米科技创始人、董事长。
8585 字 | 20分钟阅读
2020是小米创办的十周年,雷军开始了第一次演讲,《 雷军10周年演讲全文:豁出去,干|笔记侠版 》。
2021年8月10日,是雷军的第二次演讲《 雷军年度演讲:最好的投资,就是投资自己 》。
今年的8月11日,雷军举办了自己的第三次 主题演讲:《永远相信美好的事情即将发生》,小侠第一时间为大家整理出来了文字版本, 以下为雷军的最新演讲内容,enjoy~
大家晚上好,这是我第三次举办年度演讲。
这三年来世界发生了巨大的变化,已经很深的影响到了我们每一个人的生活和工作。
面对连续不断的巨大的变化,不少人觉得不适应,甚至有点迷茫,还有人特别的焦虑。
所以这次年度演讲,我就不打算谈小米了,我想聊一点不同的话题,聊一聊我是怎么度过那些人生低谷的,我是怎么穿过迷茫和焦虑的。
今天我想讲三个故事。
一、产品失败
第一个故事,就是我年轻的时候遇到了产品失败,业务崩盘,甚至公司差点关门的困境。
这个故事要从30年前说起。
1.生死关头
那是1992年,那个时候WP ...
微信显示markdown文件内容
需求需要后台上传文件,然后在小程序展示文件内容。
实现方案,文档使用Markdown,通过Golang,读取文档内容,转换为html格式。
然后再通过Api接口传给微信端。微信通过rich-text组件,显示html格式的文件内容。
Markdown转html使用github.com/russross/blackfriday/v2转换为html
123456789101112131415import ( "fmt" "github.com/russross/blackfriday/v2" "html/template" "io/ioutil")func main() { f, err := ioutil.ReadFile("./README.md") if err != nil { fmt.Println(err.Error()) } content := template.HTML(blackfriday.Run(f)) fmt.Println(con ...
mqtt安装使用及客户端测试
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
https://www.runoob.com/w3cnote/mqtt-intro.html
Deploy使用docker部署
docker_run.sh
12345678docker stop mqttdocker rm mqttdocker run --name=mqtt -d \ --privileged \ -p 1883:1883 -p 9001:9001 \ -v $PWD/data:/mosquitto/data \ -v $PWD/logs:/mosquitto/log \ ec ...