Go语言中文网 为您找到相关结果 40

Go 中如何有效的比较字符串

当优化软件时字符串比较可能和你想的有些不同。特别是包括拆分跨 goroutines 的循环, 找到一个更快的哈希算法,或者一些听起来更科学的方式。当我们做出这样的修改时,会有一种成就感。然而, 字符串比较通常是信息传递中(in a pipeline)的最大瓶颈。下面的代码段经常被使用,但它是最糟糕的解决方案 (参见下面的 benchmarks),并导致了实际问题。 ```go strings.ToLower(name) == strings.ToLower(othername) ``` 这是一种很直接的写法。把字符串转换成小写,然后在比较。要理解为什么这是一个差的解决方案,你需要知道字符串是如何表示的,以及 `ToLower` 是如何工作的。但是首先,让我们讨论一下字符串比较中主要的使用场景...阅读全文

Golang三色标记、混合写屏障GC模式图文全分析

创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次的迭代优化来解决这个问题。 〇、内容提纲 本文将系统的详细介绍Golang中GC的全分析过程,包括垃圾回收的方式递进。内容包括: G0 V1.3之前的标记-清除(mark and sweep)算法 Go...阅读全文

博文 2020-03-16 11:33:05 aceld

Go语言中优雅停止的Once&Done

简述一个WebServer中,我们往往需要在服务停止前等待已有的任务完成,避免强制当断打断了业务流程,导致事务性操作被意外破坏。优雅停止中还有一个超时的问题,但不在本文讨论范围,就跳过咯。也就是常说的柔性关闭,也有说是优雅中止的。golang通过chan的设计,可以很方便的实现优雅中止,但实际运用中却也有些坑要小心。业务模型Server接收Client投递的Task,并将Task排入Queue逐个完成,假设Task都是一些耗时任务,可能有以下原型(伪代码):var server Servervar taskCh chan Taskfunc Start(){ for { select{ case <-server.Done(): close(taskCh) case task,ok := <-...阅读全文

博文 2017-03-30 01:51:22 《三分热度》

golang atomic函数用法

近期因为项目的需要,使用了atomic.AddIntXX函数,感觉golang的这块设计还是非常实用的;非常简洁的方式实现原子操作,而不需要使用显式的锁操作。 这里顺带把atomic的函数做一个分类小结。 载入 func LoadInt32(addr *int32) (val int32) func LoadInt64(addr *int64) (val int64) func LoadPointer(addr *unsafe.Pointer) (val unsafe.Pointer) func LoadUint32(addr *uint32) (val uint32) func LoadUint64(addr *uint64) (val uint64) func LoadUintptr(a...阅读全文

博文 2019-03-23 12:34:41 CodingCode

jvm.go -- 设计和实现

jvm.go jvm.go是一个完全用Go语言实现的JVM,关于这个项目的发起原因和简单介绍可以看这篇文章。 最新进展和下一步计划 jvm.go的开发已经进行了一个半月了,除了HelloWorld和一些简单的Java代码以外,JUnit也可以正常运行了。下一步的计划是在jvm.go上把Jetty跑起来。下面介绍一下jvm.go的一些关键部分的设计和实现。 目录结构 jvmgo jvm的go语言实现 cmdline 这个包用来解析java命令行参数classfile 这个包把[]byte转化成ClassFile结构classpath 这个包实现了class文件查找native rt.jar里的本地方法实现jvm jvm核心功能 instructions 指令集rtda 运行时数据区(Runti...阅读全文

博文 2015-03-07 19:00:01 SpiderDog

为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是直接编译成机器码?

为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是直接编译成机器码? 之所以问这个问题是因为知乎上有问题“为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态?”,其中大多数答案都是在说动态语言存在的问题 那么按照这个逻辑,这三门语言都不是像JAVA、C#那样先编译成中间代码(JAVA字节码和CIL)、在运行时再JIT成机器码,那是不是说明中间码这种思路也有问题呢? 1 条评论 分享 按投票排序按时间排序 2 个回答 什么是答案总结? 答案总结 4赞同 反对,不会显示你的姓名 匿名用户 沈世军、Colliot、卿培 等人赞同 你忘记scala和clojure等jvm上的语言了。所以提问的前提就不对 你忘记sca...阅读全文

博文 2016-04-20 10:00:01 autumn20080101

记一次Golang routine卡死

Go语言最方便的地方在于可以自由自在的起routine,并且不用自己维护队列。 一个很简单的处理模型,针对于长连接活动平凡的链接独立routine进行处理,方便同一连接上下文关联,read routine A讲接收到的消息解包生成消息丢到对应socket的routine B channel中进行处理,routine B在根据不同的任务丢到对应的routine B1或者 routine B2中进行处理, 我们需要一个channel回写routine B1 routine B2的退出信号给你 B 以便B进行响应处理。 那么这么想的话 B 和B1 B2 需要两个channel进行消息通信 伪代码如下,未做友好处理。 var B1 B1Consumer var B2 B2Consumer //sta...阅读全文

博文 2016-04-21 03:00:03 hgd7123

Go语言链接器大修

之前有帖子说到 [《Google抛弃C语言,采用Go语言重写Go编译器》](http://studygolang.com/topics/471),这里说到的是链接器。同样,有部分功能会使用 Go 语言编写。 ### 摘要 ### 在构建和运行一个标准的 Go 程序时,链接器是最慢的一部分。为了解决这个问题,我们计划将链接器拆分到两部分。其中的一部分可能会用 Go 来编写。 ### 背景 ### 链接器总是 Plan 9 工具链中最慢的部分之一,而现在它是 Go 工具链中最慢的部分了。Ken Thompson 在关于工具链的概述中进行了总结: 新的编译器编译迅速、加载缓慢,生成中等质量的目标代码。编译器与移植性相关,对于不同的计算机需要若干星期的工作来构建对应的...阅读全文

信道编码之纠删码编码

简介 随着数据的存储呈现出集中化(以分布式存储系统为基础的云存储系统)和移动化(互联网移动终端)的趋势,数据可靠性愈发引起大家的重视。集群所承载的数据量大大上升,但存储介质本身的可靠性进步却很小,这要求我们必须以更加经济有效的方式来保障数据安全。 副本与纠删码都是通过增加冗余数据的方式来保证数据在发生部分丢失时,原始数据不发生丢失。但相较于副本,纠删码能以低得多的存储空间代价获得相似的可靠性。比如3副本下,存储开销为3,因为同样的数据被存储了三份,而在10+3(将原始数据分为10份,计算3份冗余)的纠删码策略下,存储开销为为1.3。采用纠删码能够极大地减少存储系统的存储开销,减少硬件、运维和管理成本,正是这样巨大的收益驱使各大公司纷纷将纠删码应用于自己的存储系统,比如Google、Faceb...阅读全文

无符号GoLang逆向经历

所需工具: ida pro,IDAGolangHelper,easyGo程序将程序拖入对应位数的IDA中观察函数窗口,可以很容易的看出来,程序进行了无符号处理,Google翻阅资料,查看无符号golang逆向技巧,找到IDAGolangHelper这一脚本(项目地址在文章最下方) 接下来,我们打开脚本(文件-脚本文件)找到IDAGolangHelper脚本所在的文件,打开,选中rename function 后选择go版本,默认是Go1.2,然后点确认,发现函数窗口变成了我们能够理解的函数名 接下来,找到main_main函数,F5得到伪代码,分析伪代码逻辑得到其使用的算法 gdb动态调试一波,看base加密是给谁解密,是我们输入的值,亦或是程序自带的值,以及其自定义的编码表(base系列加...阅读全文

博文 2019-04-22 09:34:41 Snake_1101

jvm.go -- 设计和实现

jvm.go jvm.go是一个完全用Go语言实现的JVM,关于这个项目的发起原因和简单介绍可以看这篇文章。 最新进展和下一步计划 jvm.go的开发已经进行了一个半月了,除了HelloWorld和一些简单的Java代码以外,JUnit也可以正常运行了。下一步的计划是在jvm.go上把Jetty跑起来。下面介绍一下jvm.go的一些关键部分的设计和实现。 目录结构 jvmgo jvm的go语言实现 cmdline 这个包用来解析java命令行参数classfile 这个包把[]byte转化成ClassFile结构classpath 这个包实现了class文件查找native rt.jar里的本地方法实现jvm jvm核心功能 instructions 指令集rtda 运行时数据区(Runti...阅读全文

博文 2015-03-14 14:27:51 zxhoo

安装Go语言开发环境

安装Go语言开发环境实例代码 - 详述Go语言安装所在需要的工作:安装C语言工具,安装Mercurial,更新go到新版本等操作实例。 安装go环境 1、简介 Go是一个开源项目,采用BSD授权协议。 该文档介绍如何获取Go源代码,如何编译,以及如何运行Go程序。 目前有两种方式使用Go语言。这里主要讲述如何使用Go专用的gc系列工具 (6g、8g等)。另一个可选的编译器是 基于gcc后端的 gccgo编译器。关于gccgo的细节清参考安装并使用gccgo编译器 。 Go编译器可以支持三种指令集。不同体系结构生成的代码质量有一些差别: amd64 (a.k.a. x86-64); 6g,6l,6c,6a 最成熟的实现,编译器在寄存器级别优化,可以生成高质量的目标代码(有时候gccgo可能更优...阅读全文

[翻译] Go 1.3 链接器大修

Go team 总是能带来一些惊喜的,关于 Go 的链接器,看来在 1.3 版本中要大修了。 ————翻译分隔线———— Go 1.3 链接器大修 Russ Cox 2013 年 11 月 摘要 在构建和运行一个标准的 Go 程序时,链接器是最慢的一部分。为了解决这个问题,我们计划将链接器拆分到两部分。其中的一部分可能会用 Go 来编写。 背景 链接器总是 Plan 9 工具链中最慢的部分之一,而现在它是 Go 工具链中最慢的部分了。Ken Thompson 在关于工具链的概述中进行了总结: 新的编译器编译迅速、加载缓慢,生成中等质量的目标代码。编译器与移植性相关,对于不同的计算机需要若干星期的工作来构建对应的编译器。对于 Plan 9 来说,需要若干有特定功能、且使用自己的目标格式的编译器...阅读全文

博文 2014-10-09 16:19:59 mikespook

Functional Go: HAMT 简介

在之前的一个系列的文章里,我们从基本原理开始,一步步实现了基于 Vector Trie 的持久化 List 数据结构。 接下来将要研究的是使用 HAMT 这一数据结构实现持久化 Hash Table。 持久化数据结构简介 这篇文章里, 我们对比各种可以用来实现持久化数据结构的方案,详细介绍了 Vector Trie 这种数据结构,说明了用它实现 List 优势。 HAMT 的全称是 Hash Array Mapped Trie,它和 Vector Trie 一样,都利用了前缀树(Trie)这种数据结构作为底层数据结构, 但是由于 Map 本身和 List 之间性质的差别,HAMT 在很多方面进行了特别的处理。接下来我们先从原始 Hash Table 数据结构谈起, 逐步引出 HAMT 的设计...阅读全文

平滑的基于权重的轮询算法

轮询算法是非常常用的一种调度/负载均衡的算法。依照百度百科上的解释: Round-Robin,轮询调度,通信中信道调度的一种策略,该调度策略使用户轮流使用共享资源,不会考虑瞬时信道条件。从相同数量无线资源(相同调度时间段)被分配给每条通信链路的角度讲,轮询调度可以被视为公平调度。然而,从提供相同服务质量给所有通信链路的角度而言,轮询调度是不公平的,此时,必须为带有较差信道条件的通信链路分配更多无线资源(更多时间)。此外,由于轮询调度在调度过程中不考虑瞬时信道条件,因此它将导致较低的整体系统性能,但与最大载干比调度相比,在各通信链路间具有更为均衡的服务质量。 更广泛的轮询调度应用在广度的服务调度上面,尤其在面向服务或者是面向微服务的架构中,比可以在很多知名的软件中看到它的身影,比如LVS、Ng...阅读全文

博文 2017-02-08 12:53:44 smallnest

几种计算全排列的方法

基于golang实现,有非并发实现和并发实现 递归 全排列问题,比如打印1-9的共9个字母的全排列。先输出1,然后是2-9的全排列,输出2,然后1-9中去除2的全排列。于是很自然想到递归的方法。写出伪代码: permutaion(prefix, set) { if set 为空 print prefix for s in set: permuetaion(prefix+s, set - s) } go递归实现 func permutaionImpl(prefix []byte, s []byte, cur int) { if cur == len(s) { fmt.Println(prefix) return } for _, b := range s { exist := false fo...阅读全文

博文 2019-04-24 01:34:41 劫客轮蹲

阿里云发布全新一代基于Skylake+25G网络的实例

摘要: 8月10日,阿里云发布企业级ECS产品线,在发布会上全新一代基于Skylake+25G网络的实例,得到了极大的关注,同时全新一代G5/C5/R5实例已经在青岛地域率先上线,成为中国第一家上线Skylake+25G网络的云服务商。 8月10日,阿里云发布企业级ECS产品线,在发布会上全新一代基于Skylake+25G网络的实例,得到了极大的关注,同时全新一代G5/C5/R5实例已经在青岛地域率先上线,成为中国第一家上线Skylake+25G网络的云服务商。 在企业最关注的领域,阿里云的最新一代实例带来了惊人的表现,可以将单实例的最大内网带宽发挥到30Gbps,网络收发包能力更是可以高达450万的量级。 这样的能力来自于阿里云基础设施的全面升级,在发布会上,阿里云产品总监,...阅读全文

物联网安全专家齐聚ICA联盟 多项IoT身份认证安全标准出炉

近日,ICA联盟(IoT Connectivity Alliance)安全标准组召开了第二次成员会议,这是继6月10日ICA联盟全体成员会议之后,联盟首次召开安全标准讨论会议。本次会议进一步讨论并制定了联盟终端安全方面芯片分级规范及身份认证应用的指令规范。标志着联盟安全标准化工作已步入正轨并具备了一定的行业贡献力。 注:在6月10日IoT合作伙伴计划大会2017(ICA)上,阿里巴巴IoT联合近200多家IoT产业链企业宣布成立IoT合作伙伴联盟,旨在通过建立良好的IoT生态环境,产生强大的商业和市场号召力,推动中国乃至全球IoT市场走向成熟和标准化。 在安全芯片方面,ICA联盟安全标准组首次创新的提出了IoT行业中芯片安全分级的标准及方法,建立了IoT行业的安全门...阅读全文

go语言的"泛型函数or模板函数"

首先大家知道golang是没有JAVA的泛型函数或者C++的模板函数这种语法的,今天学到了一种很有用的类似泛型操作的语法,拿来和大家分享 以大家喜闻乐见的Add函数来说明,目的是来实现一个泛型的Add函数 先写了三个ADD函数 在把三个ADD函数统一起来前,先学习一个简单的Interface{}的用法,注意int,int32,int64在setvalue的泛型判断中是不同的类型 相信到这里大部分同学都明白了,我们是要通过switch data:=input.(type)这样的类型判断来实现所谓的泛型,先按照最常规的 伪代码:Add(a,b){return a+b} 来实现 ps:这里b2其实是个float64类型 也可以传指针 看到这里有没有想到一个问题,如果我的add函数是 伪代码:add...阅读全文

博文 2016-10-31 03:00:08 easy_mind

用golang写一个语言(编译器,虚拟机)

github: https://github.com/elvin-du/tinyscript 整个项目包括三个东西: 1. 创建了一个自己的语言 2. 编译器 3. 虚拟机 golang实现的一个编译器,用来编译一个自己创建的语言(用来玩的),最后写了一个自定义虚拟机用来运行自定义语言。 ## 语言介绍 为了跨平台(其实是为了方便开发 ^ ^),所以这个语言没有静态编译成硬件指令集,最后的机器码是我自己的定义的,和MIPS类似的(其实就是一个mips子集)虚拟指令集。为了运行这些指令集,我写了一个虚拟机。 语言和golang和javascript类似,实现了函数,类型声明,函数调用等最基本的一些语言元素,没有实现类,结构体,接口等复杂数据结构。 下面是用这个语言编程的例子: ``` func...阅读全文

博文 2020-05-08 16:18:04 elvindu

golang中解决tcp传输中的粘包问题

golang中解决tcp传输中的粘包问题 Author: 岳东卫 Email: usher.yue@gmail.com 什么是粘包? 最近在写https://github.com/UsherYue/ActivedRouter (一个http/https反向代理服务)的时候遇到了粘包问题, 如果有做过网络编程的小伙伴应该都知道粘包问题,举个例子: 比如客户端在和服 务器进行通信采用的是json格式的数据包。那么此时Client和Server的数据交互流程应该如下: Client Send Json Data->经过网络->Server Reveive Data->Server Decode Json ->Done (一次交互只有一个Json数据包) 上述流程我们假设从客户端发送到服务器接收这个...阅读全文

博文 2017-07-20 05:01:34 yue7603835

Go如何做多进程的管理和状态回收

从一个任务队列中获取任务并发执行,并感知每个任务最终是否成功。类C的伪代码如下: JobQueue: ["ls", "sleep 10", "python run.py", ......] ``` for( job in JobQueue ) { pid = fork(); if( pid == 0 ) { // child proc exec(job.cmd) } elif ( pid > 0 ) { // father proc } else { } //error status } do { retpid = waitpid(-1, WHOHANG) ...阅读全文

golang:2FA双因素认证

文地址https://mojotv.cn/go/golang-2fa 1. 前言 双重认证(英语:Two-factor authentication,缩写为2FA), 又译为双重验证、双因子认证、双因素认证、二元认证,又称两步骤验证(2-Step Verification,又译两步验证), 是一种认证方法,使用两种不同的元素,合并在一起,来确认用户的身份,是多因素验证中的一个特例. 使用银行卡时,需要另外输入PIN码,确认之后才能使用其转账功能. 登陆电脑版微信时,用已经登录同一账号的手机版微信扫描特定二维码进行验证. 登陆校园网系统时,通过手机短信或学校指定的手机软件进行验证. 登陆Steam和Uplay等游戏平台时,使用手机令牌或Google身份验证器进行验证. 2. TOTP的概念 T...阅读全文

博文 2020-01-14 18:32:39 TechMojotv

刚入门Go语言小白需要注意啥?go学习

都说go语言比较火,都开始学习go语言编程,刚入门Go语言小白需要注意以下五点: 1、注意书写代码的一些规范吧,特别是注意大小写、英文标点符号区别等,在特别的位置写上注释。 2、主要是理解伪代码所描述的算法,伪代码要注意是不能直接运行的。 3、注意编译器版本与书籍上所介绍版本是否一致,也注意特殊符号,印刷版本可能与实际不一致。 4、书上的版本和当前所用的版本是否一致,有些情况下书上版本在现在来用已经过时了。 5、逻辑走通;给自己信心,其实起步阶段不难的。 附:Go语言常见web框架Beego:开源的高性能 Go 语言 Web 框架。 Buffalo:使用 Go 语言快速构建 Web 应用。 Echo:简约的高性能 Go 语言 Web 框架。 Gin:Go 语言编写的 Web 框架,以更好的性...阅读全文

博文 2019-11-19 15:58:02 zhouzhou2018

以图搜图系统工程实践

以图搜图系统工程实践 之前写过一篇概述: 以图搜图系统概述 。 以图搜图系统需要解决的主要问题是: 提取图像特征向量(用特征向量去表示一幅图像) 特征向量的相似度计算(寻找内容相似的图像) 对应的工程实践,具体为: 卷积神经网络 CNN 提取图像特征 向量搜索引擎 Milvus CNN 使用卷积神经网路 CNN 去提取图像特征是一种主流的方案,具体的模型则可以使用 VGG16 ,技术实现上则使用 Keras + TensorFlow ,参考 Keras 官方示例: from keras.applications.vgg16 import VGG16 from keras.preprocessing import image from keras.applications.vgg16 impo...阅读全文

golang 关于bool一个奇怪的问题

之前,遇到一个奇怪的问题,先上代码 type BoolStruct struct { b1 bool b2 bool b3 bool b4 bool b5 bool b6 bool b7 bool b8 bool } func (bs *BoolStruct) DoSomething() { DoSomethingForBool( bs.b1, bs.b2, bs.b3, bs.b4, bs.b5, bs.b6, bs.b7, bs.b8) } func DoSomethingForBool( b1 bool, b2 bool, b3 bool, b4 bool, b5 bool, b6 bool, b7 bool, b8 bool) byte { var b byte if b1 { //...阅读全文

博文 2020-05-14 11:33:01 laomaozi

HDU 3715 Go Deeper 二分 + 2-sat

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3715 题意: 给定一段递归伪代码,问执行这段伪代码递归的最深层数 思路: 二分枚举答案用2-sat判定是否可行。具体建图如下:如果c[i] == 0,那么a[i] OR b[i],如果c[i] == 1,那么(a[i] AND b[i]) OR (~a[i] AND ~b[i]),如果c[i] == 2,那么NOT(a[i] AND b[i]),然后强连通缩点判断i和~i是否在同一个环内 #include #include #include #include #include #include 阅读全文

博文 2016-10-07 04:00:02 discreeter

go包管理工具 glide 的问题 求助~~

我执行的指令 在jaeger-client-go 同级目录 ➜glide get github.com/uber/jaeger-client-go#2.7.0 glide.yaml package: github.com/uber/jaeger-client-go import: - package: github.com/uber/jaeger-client-go version: ^2.7.0 执行结果: [WARN] The name listed in the config file (github.com/uber/jaeger-client-go) does not match the current location (gith...阅读全文

指令集架构、机器码与 Go 语言

Home Menu 指令集架构、机器码与 Go 语言 08 Feb 2019 Golang Go实现原理 编译原理 机器码 指令集 汇编语言 指令集架构 分类 小结 机器码生成 SSA 降级 汇编器 总结 相关文章 Reference Go 语言编译的最后一个阶段就是根据 SSA 中间代码生成机器码了,这里谈的机器码生成就是在目标 CPU 架构上能够运行的代码,中间代码生成 一节简单介绍的从抽象语法树到 SSA 中间代码的处理过程,处理 SSA 的将近 50 个步骤中有一些过程严格上来说其实是属于机器码生成阶段的。 在将 SSA 中间代码降级(lower)的过程中,编译器将一些值重写成了目标 CPU 架构的特定值,降级的过程处理了所有机器特定的重写规则并且对代码进行了一定程度的优化;在 SS...阅读全文

博文 2019-03-19 12:20:19 draveness.me

使用 Makefile 构建指令集

使用 Makefile 构建指令集 make 是一个历史悠久的构建工具,通过配置 Makefile 文件就可以很方便的使用你自己自定义的各种指令集,且与具体的编程语言无关。例如配置如下的 Makefile : run dev: NODE_ENV=development nodemon server.js 这样当你在命令行执行 make run dev 时其实就会执行 NODE_ENV=development nodemon server.js 指令。 使用 Makefile 构建指令集可以很大的提升工作效率。 Makefile 基本语法 : target 其实就是执行的目标,prerequisites 是执行这条指令的前置...阅读全文

小白想问一下关于sort的用法的问题

假设有如下伪代码: ```go //--------------------------------AREA 1 BEGIN type A struct{ x int y int } //---------------------------------AREA 1 END func f(){ a = []A{A{1,1},A{1,2}}//或更多,仅仅是个例子 /** 目的:使用sort将a数组先按x排序,再按y排序 条件:不在AREA 1中添加代码(即f函数体外) 原因:希望排序条件的相关代码作用域仅仅存在于f函数中 问题:不知道该如何解决这个问题,或者能仅仅提供解决这个问题的关键字也行 */ } ``` 找了半天...阅读全文

编程是一种什么样的活动

编程是和计算机的交流。 但是计算机是一个只认识0和1的家伙。 我们如果只使用0和1和它交流,机器很开心,我们太痛苦了,机器有运行的很快,我们将想要表达的换成二进制又很慢,这种快慢可以做这样类比,我们机器一起赛跑,它都绕地球一圈了,我们才迈出第一步。 于是就有人动了歪心思,将操作,字符,数字和01对应,我们只用管这些有明确含义的内容,这个对应过程就是汇编语言,这也是面向机器的,只是做了一个很小的封装。同时编写汇编也是一个很痛苦的过程,原因如下: 你要非常懂,你现在使用的CPU的指令和CPU的工作方式 不同的CPU有不同的指令集,如果换一种CPU你需要全部重来。 于是人们又动了歪心思,我干嘛要去了解各种CPU各种指令的不同,我来写一个翻译器(术语叫编译器),将我和机器交流的想法写下来,然后再有这...阅读全文

博文 2020-03-09 15:33:11 郭青耀

关于Go中new函数方法中的Type怎么差看不了?

因为我想实现一个功能是传入一参数,通过获取这个参数的类型返回该参数类型的数据,例如:Go中的函数new 和 make 伪代码: ```go func getValue(obj interface{})Type{ // 通过断言得知该类型 v:=obj.(string) return v } ``` 返回后直接就是一个string 这个该如何实现? ...阅读全文

[Golang] Go实现Google在RTB中价格加密方法

RTB RTB 广告是一种实时竞价广告,针对每个广告在有广告位置的时候,会实时多方竞争,价格最有优势的广告主会竞得这次展示机会,在媒体测在拿到素材的时候,需将本次成交的价格,上报给指定的监控服务器,这时就需要将实时价格按照指定的加密方案加密后,替换GET链接中的请求参数中的价格宏来上报。 官网 官方给出的源代码有Java和C++版本,地址如下:https://code.google.com/archive/p/privatedatacommunicationprotocol/source/default/source 官方解释说明中, WINNING_PRICE 主要基于SHA-1 HMAC实现,官方文档给的解释都是相关伪代码,下面将如何用Go语言实现 i_key和 e_key为字符串,用于...阅读全文

博文 2019-12-13 11:32:46 Jeremy波

使用 Makefile 构建指令集

使用 Makefile 构建指令集 make 是一个历史悠久的构建工具,通过配置 Makefile 文件就可以很方便的使用你自己自定义的各种指令集,且与具体的编程语言无关。 例如配置如下的 Makefile : run dev: NODE_ENV=development nodemon server.js 复制代码这样当你在命令行执行 make run dev 时其实就会执行 NODE_ENV=development nodemon server.js 指令。 使用 Makefile 构建指令集可以很大的提升工作效率。 Makefile 基本语法 : 复制代码target 其实就是执行的目标,prerequisites 是...阅读全文

博文 2019-12-15 17:34:17 凌虚

golang 相关内容

准备年前看书+ 看完之前的gorpc项目。 可以顺带看一下gocache项目。应该是cache2go项目。 感觉对go还是整个过程不了解,到底怎么从go-> 机器指令的过程。 还有对协程也不是特别的了解。现在只能说会用。 所以要全面的进行了解。 今天工作的时候比较严格的按照顺序来,所以比较顺利的结束了一些任务...阅读全文

博文 2020-01-20 07:32:42 换首歌给你听

从Go汇编角度解释for循环的两个疑点

Go常用的遍历方式有两种:for和for-range。实际上,for-range也只是for的语法糖,本文试图从汇编代码入手解释for循环是如何工作的。 问题 首先来看看几个令人迷惑的地方。 问题1:遍历过程中取值 func main() { arr := [5]int{1, 2, 3, 4, 5} for _, v := range arr { println(&v) } } 上面这段代码里,会打印出什么? 问题2:遍历过程中修改 arr := []int{1, 2, 3, 4, 5} for v := range arr { arr = append(arr, v) } 上面这段代码里,遍历前后arr有哪些变化? 窥探虚实 对于问题1,我们期待会打印出5个不同的地址,实际上最终打印出来的...阅读全文

博文 2020-02-16 10:32:37 shaoyuan1943