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

Go位运算:取反和异或

在Go规范,^ 这个运算符在一元运算符和二元运算符中都出现了。那么他们分别是啥? 在规范中说道:^ bitwise XOR integers 这是按位异或。比如: package main import "fmt" func main() { fmt.Println(5^2) } 到这执行:[http://play.golang.org/p/iZioqWSSdA](http://play.golang.org/p/iZioqWSSdA) 一般语言中,按位取反是:~ Go中是不是这样呢?可以写个程序试一下: package main import "fmt" func main() { ...阅读全文

Go语言/golang/位操作/取反/异或/左移/右移

Go语言位操作实例 package main import ( "fmt" ) // 获取0-n之间的所有偶数 func even(a int) (array []int) { for i := 0; i < a; i++ { if i&1 == 0 { // 位操作符&与C语言中使用方式一样 array = append(array, i) } } return array } // 互换两个变量的值 // 不需要使用第三个变量做中间变量 func swap(a, b int) (int, int) { a ^= b // 异或等于运算 b ^= a a ^= b return a, b } // 左移、右移运算 func shifting(a int) int { a = a << 1 ...阅读全文

博文 2014-10-04 19:27:13 viney

golang二进制bit位的常用操作

package main import ( "fmt" "github.com/imroc/biu" ) /** golang二进制bit位的常用操作,biu是一个转换二进制显示的库 mengdj@outlook.com */ func main() { var( /** 1个字节=8个二进制位,每种数据类型占用的字节数都不一样 注意位操作千万不要越界了,如某个类型占8个bit位,偏移时候不要超过这个范围 */ a uint8=30 ) //a输出结果:00011110 fmt.Println(biu.ToBinaryString(a)) /** 将某一位设置为1,例如设置第8位,从右向左数需要偏移7位,注意不要越界 1<<7=1000 0000 然后与a逻辑或|,偏移后的第8位为1,逻辑|...阅读全文

博文 2018-08-17 12:30:00 mengdejun

golang的位运算操作符的使用

& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。 &(AND) |(OR) 就不提了最常用的东西 会编程就会。 &操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4 | 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15 ^(XOR) 在go语言中XOR是作为二元运算符存在的: 但是如果是作为一元运算符出现,他的意思是按位取反,例如 pa...阅读全文

博文 2017-01-07 08:00:02 henrylee2cn

golang 位运算

http://blog.opskumu.com/golang-bitwise.html 位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算). 位操作符 一、简介 关于位运算的操作,维基百科关于 位操作符 的理论介绍已经非常清楚了。关于 Golang 的位运算其实和 C 语言比较类似,除了取反的操作和 C 语言有点区别,Golang 使用的是^x,而 C 使用的则是 ~x取反。 二、概念 << [ 左移 ] 1 << 2 == 4输出 0100 ,相比右移更常见,移位后空缺的部分全部填0 >> [ 右移 ] 10 >>...阅读全文

博文 2016-03-10 15:00:03 leonpengweicn

golang把io.ReadCloser类型转化为[]byte

//比如要解析resp.Body(io.ReadCloser),我们可以这样处理 body, err := ioutil.ReadAll(resp.Body) 接着,我们继续分析分析函数 func ReadAll(r io.Reader) ([]byte, error) { return readAll(r, bytes.MinRead) //const MinRead = 512 } // func readAll(r io.Reader, capacity int64) (b []byte, err error) { buf := bytes.NewBuffer(make([]byte, 0, capacity)) //func NewBuffer(buf []byte) *Buffer...阅读全文

博文 2015-09-08 09:00:02 webyh

golang 位操作

package main import ( "fmt" ) // 获取0-n之间的所有偶数 func even(a int) (array []int) { for i := 0; i < a; i++ { if i&1 == 0 { // 位操作符&与C语言中使用方式一样 array = append(array, i) } } return array } // 互换两个变量的值 // 不需要使用第三个变量做中间变量 func swap(a, b int) (int, int) { a ^= b // 异或等于运算 b ^= a a ^= b return a, b } // 左移、右移运算 func shifting(a int) int { a = a << 1 a = a >> 1...阅读全文

博文 2014-12-20 19:00:01 moodlxs

Go的List操作上的一个小“坑”

一直想不清楚一个问题,简单设计的东西到底是“坑多”还是“坑少”呢? 复杂的设计,考虑的太全面,使用起来更麻烦,使用者容易陷入乱,落入自身的陷阱;而简单的设计呢,在许多方面上又顾及不周,如果使用者对其“设计”没仔细研究,或者其实现本身又是一个黑盒子,也容易掉入到设计本身遗留下来的“陷阱”。下面是我刚开始使用Go写代码时碰到的一个小“坑”,这个“坑”的原因我归结为后者。 这个“小坑”来自于go的container/list package的使用上。导致“坑”的代码大概如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main import ( "container/list"...阅读全文

博文 2014-10-25 17:00:00 kjfcpua

Go语法简略 - 依赖注入

通过对web应用框架背后原理的探索,引入了依赖注入的概念。如果你需要读懂或者写一个框架的话,依赖注入的思想绝对能帮到你。本文记录对依赖注入的探索。 区分依赖和宿主 现在我们把问题简化一下: package main import "fmt" func MethodA(name string, f func(a int, b string)) { fmt.Println("Enter MethodA:", name) f(3030, "zdd") // 给f注入参数 fmt.Println("Exit MethodA:", name) } func MethodB(a int, b string) { fmt.Println(a, b) } func main() { d := MethodB...阅读全文

博文 2015-10-12 19:00:00 zddmail

阿里云全球首次互联网8K直播背后的技术解读

摘要: 3月28日,云栖大会·深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案。这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播。 视频地址:https://v.qq.com/x/page/v0618atp7nr.html 舞台的屏幕上显示了从1300公里以外的阿里巴巴杭州园区传输回来的直播图像视频。 3月28日,云栖大会·深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案。这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播。 视频地址:https://v.qq.com/x/page/v0618atp7nr.html 舞台的屏幕上显示了从1300公里以外的阿里巴巴杭州园区传输回来的直播图像视...阅读全文

go 最大的无符号数

这里其实主要是翻译http://blog.golang.org/constants,其中An exercise: The largest unsigned int 部分。 如何构造最大的无符号数。对于确定位数的无符号数,只要移位即可,例如:对于uint32,只要const MaxUint32 = 1<<32 - 1 。 但是,对于不确定位数的uint,就不能这样了,其实,我们知道,最大的无符号数和-1在位数上是一样的。但是,无论是 const MaxUint uint = -1 // Error: negative value , 还是const MaxUint uint = uint(-1) // Error: negative value ,都不能通过编译,原因自然是类型与范围的冲突了。...阅读全文

博文 2015-12-22 04:00:00 lmxmimihuhu

四川麻将服务器程序nanoserver

四川麻将玩法, 血战到底(三人模式/四人模式)服务器程序, 房卡模式, 支持俱乐部. 基于[`Nano`](https://github.com/lonnng/nano)开发, 本程序主要用于演示如何使用`nano`进行游戏服务器程序开发, 演示客户端下载地址: iOS: [https://fir.im/tios](https://fir.im/tios) Android: [https://fir.im/tand](https://fir.im/tand) 如果要连接自己的服务器, 可以反编译android的包, 然后修改appConfig.lua中的远程服务器地址, 然后重新打包就可以玩了. 首次运行自动创建MySQL数据库表结构 结构化日志 血战三人玩法/四人玩法完整实现...阅读全文

Go 位运算

// xuhh_go_位运算符 project main.go /* 位移操作 << : 向左移位 可以看做是 乘以2的几次方 位移操作 >> : 向右移位 可以看做是 除以2的几次方 and操作 & : 都为1 才是1 or 操作 | : 只要有一个是1 那么就是1 取反 ^ :有一个为1 则 就是1 两个1 或者两个0 全是 0 标志位操作 &^ : a &^ b = (a^b) & b 其实就是清除标记位 (将a中为1的位 如果b中相同位置也为1,则将a中该位置修改为0,a中其他位不变) */ package main import ( . "fmt" ) func main() { var p = Person{"xuhh", "12"} Println(p) const a = 2...阅读全文

博文 2016-03-17 12:00:01 xuheazx

正则表达式

匹配纯文本 Ben Hello, my name is Ben. Please visit my website at http://www.forta.com. 匹配任意字符(默认模式不匹配\n,单行模式可以匹配\n) a.c abc acc a2c.a.\.xls na1.xls na2.xls前面两个点任意字符 ,最后一个转义点, . 和 \ 等都叫做元字符(metacharacter),表示这个字符有特殊含义,而不是字符本身的含义,如果我们要匹配元字符的话,我们需要对元字符进行转义 [] 字符集,对应位置可以是字符集中的任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c] ,第一个字符如果是^则表示取反,如[^abc];所有特殊字符在字符集中都失去原有的特殊...阅读全文

博文 2018-12-01 00:34:42 越塔打哭你

golang与node.js的http模块性能对比测试(go1)

去年的时候,曾经简单对比了一下golang和nodejs的http模块的性能,见: golang与node.js的http对比测试 那时golang还没发布go1,http模块比nodejs差得很远。 go1出来已经有一段时间了,我知道go的http模块性能已经有比较大的提升,但是最近依然见到有人提起去年写的那篇文章,为避免产生对golang的误解,对于go1的最新测试结果如下。 测试是在Ubuntu 12.04 64位系统下进行的: qleelulu@nb:~$ uname -a Linux nb 3.2.0-25-generic #40-Ubuntu SMP Wed May 23 20:30:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux qleel...阅读全文

博文 2014-10-04 19:26:05 QLeelulu

uboot启动zImage(go)和uImage(bootm)分析

1.之间差异。bootm 加载linux镜像是加载uIamge,uIamge是由mkimage制作而来,和zIamge的差异是uIamge是zIamge压缩过的,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge 几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动2.bootm解压过程---------------------------------------------------------------------------## Booting image at 08808000 ...Image Name: Linux-2.6.14.7Image Type: ARM Linux Kernel...阅读全文

博文 2015-09-20 09:00:00 stonye

RSS 阅读器 QReader

QReader 是一款使用 Go 和 JavaScript 编写的阅读器,支持订阅 RSS 2.0 和 Atom 1.0 格式的 feed。 为了运行 QReader ,你需要有一台 server,它可以是你放在局域网中的 PC。你需要在 server 上运行 QReader 服务端程序,然后使用手机、平板电脑或 server 上的浏览器访问 QReader。当然,如果你有兴趣,可以尝试把 QReader 编译到 Android、iOS 设备或路由器中。 QReader 是一个单用户的阅读器,不适合多人共同使用。 ![QReader](http://static.oschina.net/uploads/img/201510/03192857_qoy8.jpg) QReader 包...阅读全文

开源项目 2015-10-02 16:00:00 m3ng9i

P2P GO Client角色的协商

1 P2P GO Client协商流程  协商流程 P2P GO/Client的协商流程只需要简单的几步,如下图: P2P连接发起端:指在P2P连接过程中主动发起P2P连接的机子,用A表示; P2P连接接受端:指在P2P连接过程中接受P2P连接的机子,用B表示; 图1 P2P GO/Client协商流程 如上图所示: 1、 首先A在P2P连接初始化准备完成后,发送一个“GO Negotiation Request”给B; 2、 而这时候,B并没有准备好,这时B先保存下A的协商信息,然后发送一个“GO Negotiation Response”给A,该response包含有B的协商信息,但在该response中,B把状态state设置为P2P_SC_FAIL_INFO_CURRENTLY_U...阅读全文

博文 2016-09-17 05:00:02 zjli321

在Windows下为Go安装goprotobuf

步骤如下: 1. 安装Go for windows(测试版本v1.1.2),设置好GOPATH,GOROOT等环境变量 2. 安装protoc windows binary:直接下载protoc-2.5.0-win32.zip,解压protoc.exe到path所包含的目录即可 3. 拿到goprotobuf的source code: go get code.google.com/p/goprotobuf/{proto,protoc-gen-go} 以上是官网做法,一般在windows下还需要先搞定hg等等工具 其实也可以直接从https://code.google.com/p/goprotobuf/source/browse/ 下载,点击"download zip"即可 下载之后,需要手工...阅读全文

博文 2014-10-04 19:26:02 yhcharles

用Golang编写的网际校验和算法

网际校验和算法适用于IP、TCP、UDP、ICMP等协议的校验。 func CheckSum(data []byte) uint16 { var ( sum uint32 length int = len(data) index int ) //以每16位为单位进行求和,直到所有的字节全部求完或者只剩下一个8位字节(如果剩余一个8位字节说明字节数为奇数个) for length > 1 { sum += uint32(data[index])<<8 + uint32(data[index+1]) index += 2 length -= 2 } //如果字节数为奇数个,要加上最后剩下的那个8位字节 if length > 0 { sum += uint32(data[index]) } //...阅读全文

博文 2015-06-23 18:06:14 u011774512

go学习笔记-控制流

控制语句 条件语句 条件语句不需要使用括号将条件包含起来(); 无论语句体内有几条语句,花括号{}都是必须存在的; 左花括号{必须与if或者else处于同一行; 在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔; 在有返回值的函数中,不允许将“最终的”return语句包含在if…else…结构中,否则会编译失败: func example(x int) int{ var result int if x == 0 { result = 5 } else { result = x } return result } 选择语句 switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough c...阅读全文

博文 2014-10-04 19:26:15 Bluven

如果Android真的收费了,你怎么看?

**声明:本文有终端研发部yuer原创发布,未经允许,不得转载** ### 前言 今天突然看到一群里有人发了下面这样一张图片,然后群里又炸了! ![ ](https://upload-images.jianshu.io/upload_images/14371339-8a0607fb7fa57008.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 于是又和同事讨论了android收费的问题,然后隔壁正在玩农药的UI妹子就笑了... ##### 没错! **安卓可能要收费了!安卓可能要收费了!安卓可能要收费了!** ##### 欧盟两张罚单,谷歌白干半年 欧盟向来以反垄断法严厉著称,苹果、三星、英特尔、高通等巨头都吃过欧盟反垄断法的...阅读全文

博文 2018-10-24 10:28:57 androidstarjacksky

/src/pkg/math/abs.go源码阅读兼谈golang与汇编

开头的碎碎念: 对接微信公众平台的时候,开始有个字符串排序,我接触golang毕竟时间尚浅,很多东西都是能从网上找到就直接从网上找,结果就是找了好几个示例代码都不好用,好容易一个好用的,从头开始实现的,代码太多了。我就想,google应该把这些玩意都封装好了吧,不然一个新出的语言只有基础语法,没有强大的标准库,谁用这玩意啊。也就是那时候第一次接触src文件夹,后来发现pkg里的那些go文件是绝好的学习资料。 那么多文件、文件夹从哪开始看呢,我的原则,先找没有依赖性的,也就是没有import的,这么寻摸着就找到了math文件夹。笨方法,从a开始按顺序来呗,这不就碰到了abs.go 难以理解的第12行: // Copyright 2009 The Go Authors. All rights r...阅读全文

博文 2014-10-04 19:26:06 wlts

Golang、Python中刷直播视频弹幕的功能。

别人需要做这个功能,开始用易语言实现,发现被编码的问题绕到坑底了,ANSI-UTF8 ,gb323-uft8 ansi到un等等,做到最后也没有完成,因为做一个程序顾客的要求有时候很苛刻,有的甚至需要几个小时完成。 因为这个APK,是新版本的,我曾经研究了几百个APK,也反编译了上百个SWF,研究过上百个JS加密的,所以非常懂得这些东西套路,目前SO库加密的比例很几年前的20%急剧上升到目前的90%,也就是说,反编译上基本上是一条不归路、也是一条血路。 APK从以前的DEX文件到反编译的JAVA代码,到SO库跟踪调试dump,再到修改smail代码,再到反射HOOK注入,再到当前的内存截流等等,方法一波接一波,但是APK从加固、到反调试,再到校验等等,也是防止方法一重接着一重。 SWF的反编...阅读全文

博文 2017-03-31 02:00:24 大洋的顶端

go语言学习-类型

Go语言内置以下这些基础类型:  布尔类型:bool。  整型:int8、byte、int16、int、uint、uintptr等。  浮点类型:float32、float64。  复数类型:complex64、complex128。  字符串:string。  字符类型:rune。  错误类型:error。 此外,Go语言也支持以下这些复合类型:  指针(pointer)  数组(array)  切片(slice)  字典(map)  通道(chan)  结构体(struct)  接口(interface) 1、type关键字 go语言支持type关键字,可以定义一种类型,这个关键字大体上和C语言的typedef相似,但是有个关键点不同:不是同一个类型。 格式如...阅读全文

博文 2016-04-28 12:00:01 kuoshuang

golang uint8转int8越界

var i uint8 = 128 fmt.Println(int8(i)) //结果为-128 很显然这里出现了越界的情况,int8类型的范围是-128~127,所以uint8类型的128转换为int8类型时会出现越界。那么这里是怎么出现-128结果的呢? 原来计算机中都是以补码进行存储的。uint8类型的128,原码为1000 0000,补码也为1000 0000;当转换为int8类型时,补码还是1000 0000,这里就变成了已知补码求原码;首位代表符号位,不做处理,其余各位按位取反再加1,截断之后可以得出1000 0000,即-128...阅读全文

博文 2019-04-23 04:34:41 杜子龙

位运算计算(go语言)

符号 二进制表示 十进制表示 0110 6 1011 11 & 0010 (上下都是1的话才是1,否则是0) 前后顺序不管,类似加法:1+2=2+1 2 | 1111 (上下都是0的话才是0,否则是1) 前后顺序不管,类似加法:1+2=2+1 15 ^ 1101 (上下数字不一样的话才是1,一样的话是0)前后顺序不管,类似加法:1+2=2+1 13 &^ 0100 (下面的数字是1,则为0,下面的数字为0,则为上面的数字)前后顺序不同结果不同,类似减法:1-2不等于2-1 方法2:先将下面的1011取反为0100,将取反完的0100和上面0110进行&运算,也可得到0100 4 关于&^的计算 上面的数字是6,二进制表示为: 0 1 1 0 下面的数字是11,二进制表示为: 1 0 1 1 ...阅读全文

博文 2014-10-04 19:26:44 waynehu

使用Go 语言的三个原因

导读 几个星期前,我一个朋友问我:“为什么要关心 Go 语言”? 因为他们知道我热衷于 Go 语言,但他们想知道为什么我认为其他人也应该关心。有三个原因:安全性、生产力和并发性。有些语言可以涵盖一个也有可能是两个方面,但是这三个方面的结合使得 Go 成为主流程序员的绝佳选择。 几个星期前,我一个朋友问我:“为什么要关心 Go 语言”? 因为他们知道我热衷于 Go 语言,但他们想知道为什么我认为其他人也应该关心。本文包含三个我认为 Go 是重要的编程语言的原因。 安全 个人而言,你和我或许完全有能力在 C 中编写程序,既不会泄漏内存,也不会不安全地重复使用内存。然而,整体上,即使有超过40 年的经验,用 C 的程序员也无法可靠地这样做。 尽管静态代码分析、valgrind、tsan 以及 “-...阅读全文

博文 2017-04-24 04:00:38 linuxprobe18

Go语言核心之美 2.4-布尔值

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50907257 布尔值有两种:true和false。if和for语句中的条件都是布尔值,比较运算符== 、<等也会产生一个布尔值。一元运算符! 是逻辑取反操作,所以!true就是false。Go语言提倡简洁的风格,因此我们会将x == true这种表达式直接写成x:if x {..} 。 布尔值可以结合&&(AND) 、|| (OR)一起使用,这两个操作符都有短路特性,如果操作符的左边表达式就能决定结果了,那操作符右边的表达式不会求值:s != "" && s[0] == 'x' 如果s是空字符串,那s[0]会panic,但是...阅读全文

博文 2019-03-17 13:12:07 erlib

go变量和数据类型

go语言的基本数据类型 布尔类型:bool 整型:int8、byte、int16、int、uint、uintptr等 浮点类型:float32、float64 复数类型:complex64、complex128 字符串:string 字符类型:rune 错误类型:error int8 表示一个字节长的整形(-128 ~ 127);对应的还有uint8表示非负的一个字节长的整形(0 ~ 255);byte和uint8相同;int 的长度同操作系统相关,32位的系统长度为4个字节,64位系统为8个字节;go语言添加了string为基本类型,这是和java不同的 go语言变量的定义 方式1 : var b1 bool = true 变量定义时,前面添加一个var关键字,整的像javascript类...阅读全文

博文 2016-07-04 02:00:01 sten

golang 粗谈

golang是一门很独特的语言, 属于实战派系列. 最喜欢的两门语言python和golang. 现在感觉, go相比python , 有一些自己独特的特点, 前景巨大. (1)开发效率高. golang的开发效率市非常高的, 虽然属于静态语言. 但是编译速度, 开发速度都是非常快的. 当然, 我们不和python动态语言相比了. 这个得益于gotool, 这个非常强大的命令行工具. (2)语言成分相当干净, golang的关键字只有25个. 取消了大量的oop特性. 但是我们发现, 那些特性取消了, 我们照样能够实现一样非常强大的功能, 甚至更强大. 按照创始人的说法就是, 既然那些功能特性并没有带来非常明显的性能的提升, 我们就不用再背着这个包袱了, 所以golang是极简,实用的. 比...阅读全文

博文 2014-10-04 19:26:06 qiya2007

Go中全局变量存储在哪里?

创建一个src.go文件,加入下面的代码 package main import "fmt" var xxx = 0xEE // 通过值来推断类型 var yyy int = 0xFF // 定义类型,并赋值 var zzz int // 定义变量 func main() { xxx = 0x11 yyy = 0x22 zzz = 0x33 fmt.Println(xxx, yyy, zzz) } 然后在命令行输入 go build -gcflags "-N -l" -N 关闭编译器优化 -l 关闭内联 gdb调试 进入gdb模式 gdb src 设置断点 (gdb) b 14 // 在第十四行设置断点 运行程序 (gdb) r 设置汇编语言为intel (gdb) set disassem...阅读全文

博文 2019-12-26 14:38:16 沙漠中的猴

Go语言核心技术(卷一)之2.1-整数

第二章 序 在计算机底层,一切都是比特位。然而计算机一般操作的都是固定大小的值,称之为字(word)。字会被解释为整数、浮点数、比特位数组、内存地址等,这些字又可以进一步聚合成数据包(packet)、像素点、作品集、诗歌或者其它任何对象。Go语言提供了多样化的数据组织方式,这些数据类型既有硬件层面的兼容性,又能让程序员方便的组合成更复杂的数据类型。 Go语言的数据类型分为四大类:基本类型,复合类型,引用类型及接口类型。本章将介绍基本类型:数字,字符串,布尔值。 一、整数 Go语言的数值数据类型包括以下几种:整数,浮点数,复数,每一种都包含了大小(size)不同的数值类型,例如有符号整数包含int8,int16,int32,int64,int。每一种数值类型都会决定值的大小和符号(正负),我们...阅读全文

博文 2016-03-16 15:00:05 abv123456789

(转)二进制相关基础

载:https://mp.weixin.qq.com/s?__biz=MzU2NjIzNDk5NQ==&mid=2247483797&idx=1&sn=18579f6a4e319b6adefc02520a59e2bc&scene=21#wechat_redirect golang的基本数据类型-整型 种类  有符号(负号)  1. int8 int16 int32 int64 无符号(无符号)  1. uint8 uint16 uint32 uint64 架构特定(取决于系统位数)  1. int uint 类型别名  1. Unicode字符rune类型等价int32  2. byte等价uint8 特殊类型  1. uintptr,无符号整型,  2. 由系统决定占用位大小,足够存放指针...阅读全文

博文 2018-08-13 18:35:56 one_zheng

移动APP测试之安全性测试策略分析

随着互联网发展,APP应用的盛行,最近了解到手机APP相关的安全性测试,以webview为主体的app,站在入侵或者攻击的角度来讲,安全隐患在于http抓包,逆向工程。 目前大部分app还是走的http或者https,所以防http抓包泄露用户信息以及系统自身[url=]漏洞[/url]是必要的,通过抓包当你查看一个陌生用户信息时,一些手机号,qq等信息页面上应该不显示的,但这些信息不显示并不代表[url=]服务器[/url]没有下发,好多都是客户端限制的,通过抓包,完全可以查看到陌生用户的app。再如好多发帖,push消息的应用,如果没有消息有效性的验证,抓到包之后篡改消息,服务器一点反应都没,这就会留有极大的隐患。逆向工程对于Android就很好理解了,反编译,修改或者插入自己...阅读全文

Go Slice 最大容量大小是怎么来的

文地址:Go Slice 最大容量大小是怎么来的 前言 在《深入理解 Go Slice》中,我们提到了 “根据其类型大小去获取能够申请的最大容量大小” 的处理逻辑。今天我们将更深入地去探究一下,底层到底做了什么东西,涉及什么知识点? Go Slice 对应代码如下: func makeslice(et *_type, len, cap int) slice { maxElements := maxSliceCap(et.size) if len < 0 || uintptr(len) > maxElements { ... } if cap < len || uintptr(cap) > maxElements { ... } p := mallocgc(et.size*uintptr(ca...阅读全文

博文 2019-01-06 20:34:43 煎鱼

golang学习实例-猜拳小游戏

学了一段golang,觉得应该实践一下,写了这个猜拳小游戏,顺带着学习下go testing。 主程序源码: package main import ( "bufio" // 输入输出 "fmt" "math" "math/rand" "os" "strconv" "time" ) //rock, paper, scissors const ( rock int = 1 scissors int = 2 paper int = 3 rockName string = "石头" scissorsName string = "剪刀" paperName string = "布" win int = 1 lose int = -1 draw int = 0 ) // 拳的结构 type Finge...阅读全文

博文 2015-06-17 20:03:59 hnxxwyq

Go语言之指针篇

发自自己的公众号(灰子学技术)原文链接:https://mp.weixin.qq.com/s/qXi-_e_nuVDnaiPfm2HIHQ一、写在前面的话:在介绍Go的指针之前,我们需要先介绍下,指针是什么?为什么我们需要指针?(备注:这里指的是原始指针。)1.指针是什么?首先指针是一个变量,全名叫做指针变量,只不过这个变量里面存储的值是一个地址而已。所以指针,哪怕是空指针,都是有地址的,因为变量都是有地址的。例子如下:Output:从下面的输出,我们可以看出空指针a的地址是存在,在a指向b之前,指针a的值为nil,指向b之后,数值变成了变量b的地址,而对a 做操作*a的话,数值为变量b对应的数值10。2.为什么我们需要指针?我们之所以需要指针,是因为我们要做间接寻址,就是在程序运行的时候,...阅读全文

博文 2019-09-03 13:47:51 ZhDavis

golang json 包简单分析

首先上代码: func main() { b := true a1, _ := json.Marshal(b) a2, _ := Marshal(b) fmt.Println(string(a1)) fmt.Println(string(a2)) } 输出: true true 以最简单的单个bool 类型的序列化为例,我们来搞清楚json 包里面的调用栈如下: 从入口出发,第一个方法是: func Marshal(v interface{}) ([]byte, error) { e := &encodeState{} err := e.marshal(v) if err != nil { return nil, err } return e.Bytes(), nil } 这里没有什么特殊,...阅读全文

博文 2015-09-25 03:00:00 bnbqian

位运算详解

位运算 Bitwise operation 前言 日常提出疑问,然后引出今天的下文: 如何在代码里不用 “+” 、“-” 实现加减法的操作? 接下来我就介绍一项一招制敌的技能 —— 位运算 正文 什么是位运算 程序中的所有数在计算机内存中都是以二进制的形式存储的。位运算(Bitwise operation)就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高。 在程序中使用位运算进行操作,会大大提高程序的性能。 位运算的本质 位运算是在二进制之间操作,粗略地说就是 0 和 1 之间的转换 位运算的基本操作 与运算 & 两个位都是 1 时,结果才为 1 1 & 1 = 1 1 & 0 = 0 100 & 001 = 0 100 & 101 = 100 或运算 | 两个位都是 0 时,...阅读全文

博文 2019-12-11 15:32:58 曲镇

学习笔记——原码、反码、补码

一、原码表示法 原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为“0”时表示该数为正,符号位为“1”时表示该数为负,数值部分与真值相同。若真值为纯小数,它的原码形式为Xs,.X1X2X3...Xn,其中Xs表示符号位。原码定义为: example-1: 若:X = 0.0110 则:[X]原 = X = 0.0110 若:X = -0.0110 则:[X]原 = 1 - X = 1 - (-0.0110) = 1 + 0.0110 = 1.0110 若真值为纯整数,它的原码形式为XsX1X2X3...Xn,其中Xs表示符号位。原码的定义为: example-2: 若:X = 1101 则:[X]原 = X = 01101 若:X = -1101 则:[X]原 = 2^n - ...阅读全文

博文 2018-12-30 09:34:44 Lierba

Go语言核心之美 2.4-布尔值

布尔值有两种:true和false。if和for语句中的条件都是布尔值,比较运算符== 、<等也会产生一个布尔值。一元运算符! 是逻辑取反操作,所以!true就是false。Go语言提倡简洁的风格,因此我们会将x == true这种表达式直接写成x:if x {..} 。 布尔值可以结合&&(AND) 、|| (OR)一起使用,这两个操作符都有短路特性,如果操作符的左边表达式就能决定结果了,那操作符右边的表达式不会求值:s != "" && s[0] == 'x' 如果s是空字符串,那s[0]会panic,但是因为s为""的时候,&&左边的表达式是false,因此根据短路规则,&&右边的表达式不会求值,也就不会panic。 因为&&比||的优先级更高,所以下面的条件表达式不需要括号:if '...阅读全文

博文 2017-10-27 20:58:35 erlib

Go语言核心技术(卷一)之2.4-布尔值

布尔值有两种:true和false。if和for语句中的条件都是布尔值,比较运算符== 、<等也会产生一个布尔值。一元运算符! 是逻辑取反操作,所以!true就是false。Go语言提倡简洁的风格,因此我们会将x == true这种表达式直接写成x:if x {..} 。 布尔值可以结合&&(AND) 、|| (OR)一起使用,这两个操作符都有短路特性,如果操作符的左边表达式就能决定结果了,那操作符右边的表达式不会求值:s != "" && s[0] == 'x' 如果s是空字符串,那s[0]会panic,但是因为s为""的时候,&&左边的表达式是false,因此根据短路规则,&&右边的表达式不会求值,也就不会panic。 因为&&比||的优先级更高,所以下面的条件表达式不需要括号:if '...阅读全文

博文 2016-03-16 20:00:02 abv123456789

Go语言的bit clear操作

以下摘自The Go Programming Language: The &^ operator is bit clear (AND NOT): in the expression z = x &^ y, each bit of z is 0 if the corresponding bit of y is 1; otherwise it equals the corresponding bit of x. 即z = x &^ y运算相当于先把y取反(针对y的每个bit:0变成1,1变成0),然后再和x进行&运算。参考下例: package main import "fmt" func main(){ var x uint8 = 1 var y uint8 = 1 << 2 fmt.Prin...阅读全文

博文 2017-06-24 19:32:57 肖楠

Go语言核心之美 2.1-整数

第二章 序 在计算机底层,一切都是比特位。然而计算机一般操作的都是固定大小的值,称之为字(word)。字会被解释为整数、浮点数、比特位数组、内存地址等,这些字又可以进一步聚合成数据包(packet)、像素点、作品集、诗歌或者其它任何对象。Go语言提供了多样化的数据组织方式,这些数据类型既有硬件层面的兼容性,又能让程序员方便的组合成更复杂的数据类型。 Go语言的数据类型分为四大类:基本类型,复合类型,引用类型及接口类型。本章将介绍基本类型:数字,字符串,布尔值。 一、整数 Go语言的数值数据类型包括以下几种:整数,浮点数,复数,每一种都包含了大小(size)不同的数值类型,例如有符号整数包含int8,int16,int32,int64,int。每一种数值类型都会决定值的大小和符号(正负),我们...阅读全文