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

golang中使用protobuf

1. 下载protoc 可以去https://github.com/google/protobuf/releases下载源码自己编译 或者https://github.com/google/protobuf/releases去下载编译好的二进制文件 2. 安装protoc-gen-go go get github.com/golang/protobuf/protoc-gen-go 安装好了之后, 在$GOPATH/bin下面会找到protoc-gen-go.exe 3. 使用protoc.exe 和 protoc-gen-go.exe 生成协议代码 protoc --proto_path=./proto --go_out=./src_gen/go/ scoreserver/score_inf...阅读全文

博文 2018-08-08 16:34:48 yandaren

Go strconv包_字符串和数值类型的转换

Go strconv包_字符串和数值类型的转换 将字符串转换成数值类型和布尔类型 package main import ( "fmt" "strconv" ) func main() { str1 := "0.23" f1, _ := strconv.ParseFloat(str1, 64) f2, _ := strconv.ParseFloat(str1, 32) fmt.Println(f1) //0.23 fmt.Println(f2) //0.23 fmt.Println(f2 * 100) str2 := "1234f" // 16进制的字符串 // 将字符串解析为整数,ParseInt 支持正负号,ParseUint 不支持正负号。 // base 表示进位制(2 到 36),...阅读全文

[go] unsafe包

uintptr是go的内置类型,用于指针运算,其底层基于int类型。uintptr不是指针,GC会回收uintptr类型的对象。 unsafe.Sizeof unsafe.Sizeof函数返回的就是uintptr类型的值(表达式,即值的大小): var p float64 = 99 fmt.Println(reflect.TypeOf(unsafe.Sizeof(p))) fmt.Println(unsafe.Sizeof(p)) >>> uintptr >>> 8 unsafe.Sizeof接受任意类型的值(表达式),返回其占用的字节数,在上面的例子中float64的大小是8bytes。 如果传入一个指针类型的对象会返回多少呢? type W struct { a byte b int32...阅读全文

博文 2016-04-25 14:00:00 cc7756789w

go圣经笔记--第三章

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。 3.1. 整型 1)固定大小,int8、int16、int32和int64,分别对应8、16、32、64bit大小的有符号整形数,与此对应的是uint8、uint16、uint32和uint64四种无符号整形数类型。 2)不固定大小,int和uint,分别对应32或64bit 3)Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使用。同样byte也是uint8类型的等价类型。 4)还有一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。 5)运算符 算术运算符+、-、*和/可以适用与于整数、浮点数和复数,但是取模运算符%仅用于整数间的运...阅读全文

博文 2016-04-15 12:00:01 betterjun30

golang 浮点数操作

有需求需要将金额由单位 元 转换成单位 分数据库中金额元存储的数据结构使用的是decimal(15,2),golang中使用float64保存变量内容。通过转换将 float64 -> int64最简单的方式:int64(float64 * 100),但是由于浮点数在计算机内的表示方式问题导致有一部分数据会出现问题,例如:var v = 67.6 fmt.Println(int64(v *100)) 输出结果为:6759解决方法:使用"github.com/shopspring/decimal"包,将对浮点数进行精确计算,例如:f1 := decimal.NewFromFloat(v)f2 := decimal.NewFromFloat(100)fmt.Println(f1.Mul(f2)....阅读全文

博文 2018-08-02 09:34:52 xing00lian

Golang 语言基础之六: string, pointer

Golang 语言基础之六: string, pointer Golang 语言基础系列: Golang 语言基础之一: type, variable, constant Golang 语言基础之二: for, ifelse, switch Golang 语言基础之三: array, slice Golang 语言基础之四: map, range Golang 语言基础之五: function Golang 语言基础之六: string, pointer Golang 语言基础之七: struct, method Golang 语言基础之八: interface Golang 语言基础之九: error, panic, recover Golang 语言基础之十: goroutine, ch...阅读全文

博文 2017-02-10 13:40:49 Xiaohui Wang

golang生成JSON及解析JSON

一、JSON解析到结构体 在介绍这部分之前先简要介绍一下Json语法 JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 1.JSON名称/值对 "name" : "value" 2.JSON值 可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在中括号中) 对象(在大括号中) null JSON数据 JSON 数字可以是整型或者浮点型 { "age":30 } JSON对象 JSON 对象在大括号({})中书写: 对象可以包含多个名称/值对: { "name": "runoob", "alexa": 10000, ...阅读全文

博文 2019-02-24 17:34:42 不屈真实

HD钱包学习小结

在比特币/以太坊等公链上都会用到钱包。钱包主要用来管理用户的私钥,及用户在链上的数字货币,即用私钥对交易进行签名。私钥可用于生成特定消息的签名,此签名可以在不泄露私钥的情况下使用公钥进行验证。 因为私钥极其重要,一旦泄漏就意味着数字资产的所有权就掌握在别人手里。理论上私钥可以是任意的一串随机数字串,不仅难以记忆也没有规律可循,有必要利用一些密码学方法来管理秘钥对(一个秘钥对包括一个私钥和对应的公钥),既方便管理又足够安全。 1. 非确定性钱包 如果只是完全随机生成一个数字串作为私钥,可以使用密码学安全的伪随机数生成器(CSPRNG,Cryptographically secure pseudorandom number generator,密码学安全伪随机数生成器)。这些私钥之间完全独立,相...阅读全文

博文 2018-07-29 11:34:55 shi_qinfeng

Go语言学习之路(五)输入和输出

输出语句 1.输出方法 fmt.Println()//换行输出 fmt.Print()//不换行输出 fmt.Printf() 2.输入方法 数据间隔只能使用回车 数据间隔可以使用空格和回车 fmt输入输出(printf和scanf采用的数据类型格式化) Scan()函数和Scanf()方法关于字符型变量的问题: var a byte fmt.Scan(&a) fmt.Printf("%c",a) Scan接收字符型变量时只接收整型 并通过ASCII码值转换为字符型 var a byte fmt.Scanf("%d",&a) fmt.Printf("%c",a) Scanf %d只能接收整型,不能接收字符型 所以在输入字符型变量时应该使用fmt.Scanf(“%c”,&a) 格式 含义 %%...阅读全文

博文 2018-12-17 00:31:01 weixin_39640179

Go 反射:根据类型创建对象-第一部分(原始类型)

> 这是关于在 Go 中根据类型创建对象的博客系列两部分的第一部分。这部分讨论原始类型的对象创建 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-reflect/cover1.png) Go 中的 reflect 包提供了根据执行过程中对象的类型来改变程序控制流的 API。 reflect 包提供了两个重要的结构 - Type 和 Value。 Type 是一个 Go 中任何类型的代表。换句话说,它可以被用于编码任何 Go 类型(例如:int , string , bool , myCustomType 等等)。Value 是一个 Go 中任何值的代表。换句话说,它可以被用于编码、操作任何...阅读全文

博文 2018-02-23 17:51:11 polaris

Golang 格式输出符号

%d int变量 %x, %o, %b 分别为16进制,8进制,2进制形式的int %f, %g, %e 浮点数: 3.141593 3.141592653589793 3.141593e+00 %t 布尔变量:true 或 false %c rune (Unicode码点),Go语言里特有的Unicode字符类型 %s string %q 带双引号的字符串 "abc" 或 带单引号的 rune 'c' %v 会将任意变量以易读的形式打印出来 %T 打印变量的类型 %% 字符型百分比标志(%符号本身,没有其他操作...阅读全文

博文 2019-05-05 04:31:50 zhengzizhi

go语言标准库分析之os

golang讲解(go语言)标准库分析之os(7) 今天我们继续讲golang标准库的os包,依然是没有废话直接来 (1)(f *File).Name()这个函数是返回文件的名称,函数原型func (f *File) Name() string要文件的指针操作,返回字符串,感觉比较鸡助的方法底层实现 func (f *File) Name() string { return f.name } import ( "fmt" "os" )func main() { f, _ := os.Open("1.go") fmt.Println(f.Name()) //输出1.go } (2)(f File).Read()这个是函数的指针来操作的,属于FIlE的method,函数原型func (f *Fi...阅读全文

博文 2014-10-04 19:26:24 kuerant

go语言编码规范

1.代码规范 类型标识例子 int i / I iCount、ICount bool b / B bShow、BShow string s / S sName、SName uint u / U uColor、UColor float f / F fPlace、FPlace pointer p / P *pName、*PName struct stc/Stc stcPerson、StcPerson array arr / Arr arrHero、ArrHero slice slc / Slc sliHero、SliHero map map / Map mapPerson、MapPerson const 全部大写 const PI float32 = 3.14 interface I IMyIn...阅读全文

博文 2014-10-04 19:26:47 fancyzhen

关于推送,你可能忽略的那些事儿

推送是维持APP留存率最重要的方法之一,但是大多数APP开发者都没有正确意识到推送的意义,也没有建立起一套评估Push质量的方法。推送是一个典型的双刃剑,如果使用的好可以帮你提升留存率,可是使用不当,甚至滥用将会成为你APP的噩梦。但是不幸的是,我看到的大多是推送的不当使用。 1. 给用户一个允许推送的理由 之前看过一篇文章讲的很好,大概的意思是说你要任何事情的时候都请给一个需要的理由。作为APP开发者我们都知道,用户很少会反悔从前做过的设置。我举个简单的例子,如果用户在最初的时候禁止你访问他的通讯录,可能你就再也没有机会访问他的通讯录了。同理,如果用户最初的时候禁止你的推送消息,那么你可能就再也没有机会去为用户发送推送通知了。 所以在希望用户授予推送权限时,一定要给用户一个清...阅读全文

Go io包

Go io包 Go io包的接口概览 io.Writer interface // Writer 接口包装了基本的 Write 方法,用于将数据存入自身。 // Write 方法用于将 p 中的数据写入到对象的数据流中, // 返回写入的字节数和遇到的错误。 // 如果 p 中的数据全部被写入,则 err 应该返回 nil。 // 如果 p 中的数据无法被全部写入,则 err 应该返回相应的错误信息。 type Writer interface { Write(p []byte) (n int, err error) } 我们可以通过查看标准库文档,列出实现了io.Reader或io.Writer接口的类型(导出的类型): os.File 同时实现了io.Reader和io.Writer s...阅读全文

博文 2017-02-12 12:00:25 xxggy

用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

30分钟上手GO语言--方法和接口

方法和接口 这章讲如何为类型定义方法;如何定义接口;以及如何将所有内容贯通起来。 方法:Go 没有类,但可以在结构体类型上定义方法。 package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) } 可以对包中的 任意 类型定义任意方法,而不仅仅是针对结构体。但是,不能对来自其他包的类型或基础类型定义方法...阅读全文

Go fmt包 翻译 完毕

Fmt包 import "fmt" 简介 ▾ Package fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C但更简单一些。 输出 格式: 一般: %v 基本格式的值。当输出结构体时,扩展标志(%+v)添加成员的名字。the value in a default format. when printing structs, the plus flag (%+v) adds field names %#v 值的Go语法表示。 %T 值的类型的Go语法表示。 %% 百分号。 布尔型: %t 值的true或false 整型: %b 二进制表示 %c 数值对应的Unicode编码字符 %d 十进制表示 %o 八进制表示 %q 单引号 %x 十六进制表示,...阅读全文

博文 2015-01-08 14:00:01 cometwo

Golang 笔记之深入浮点数

引言下面的一段简单程序 0.3 + 0.6 结果是什么?1 var f1 float64 = 0.32 var f2 float64 = 0.63 fmt.Println(f1 + f2)有人会天真的认为是0.9,但实际输出却是0.8999999999999999(go 1.13.5)问题在于大多数小数表示成二进制之后是近似且无限的。以0.1为例。它可能是你能想到的最简单的十进制之一,但是二进制看起来却非常复杂:0.0001100110011001100…其是一串连续循环无限的数字(涉及到10进制转换为2进制,暂不介绍)。结果的荒诞性告诉我们,必须深入理解浮点数在计算机中的存储方式及其性质,才能正确处理数字的计算。golang 与其他很多语言(C、C++、Python…)一样,使用了IEEE...阅读全文

博文 2020-01-13 16:33:45 jonson_jackson

go源码阅读笔记(math.4)

go源码阅读笔记(math.4) 参考godoc API API列表 func NaN() float64 函数返回一个IEEE 754“这不是一个数字”值。 func IsNaN(f float64) (is bool) 判断f是否是NaN值 func Inf(sign int) float64 如果sign>=0返回正无穷大,否则返回负无穷大 func IsInf(f float64, sign int) bool 判断其是否是无穷大数 func Float32bits(f float32) uint32 函数返回浮点数f的IEEE 754格式二进制表示的值对应的4字节无符号整数(每位值不变)。主要是用于位运算之类的,转换成无符号整数,这样不会使用浮点运算器,速度快 func Float...阅读全文

博文 2016-04-05 00:00:00 qq_15437667

go 文件读取和文件实时监控

package main import ( "bufio" "io" "io/ioutil" "log" "os" "time" ) // 一次性读取 func ReadAll(filePth string) ([]byte, error) { f, err := os.Open(filePth) if err != nil { return nil, err } defer f.Close() /* ReadAll从r读取数据直到EOF或遇到error,返回读取的数据和遇到的错误。 成功的调用返回的err为nil而非EOF。 因为本函数定义为读取r直到EOF,它不会将读取返回的EOF视为应报告的错误。 */ return ioutil.ReadAll(f) } // 分块读取 可在速度和内...阅读全文

博文 2019-06-26 17:32:42 战神悟空

golang 时间编程

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s golang中一个很重要的表征时间的数据类型是Time,基本就是三个成员变量 sec ,nsec,Location,详细意思可以参看注释。 type Time struct { // sec gives th...阅读全文

博文 2015-08-25 22:00:01 冷絮

golang标准库学习——buffio包

import "bufio" bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。 一、常量 const ( // 用于缓冲一个token,实际需要的最大token尺寸可能小一些,例如缓冲中需要保存一整行内容 MaxScanTokenSize = 64 * 1024 ) 二、变量 var ( ErrInvalidUnreadByte = errors.New("bufio: invalid use of UnreadByte") ErrInvalidUnreadRune = errors.New("bufio: invalid use of UnreadRune") ErrB...阅读全文

博文 2016-01-30 10:00:01 weiyuefei

阿里云造了个“隐身斗篷”,被Gartner点名了 !

熟悉《哈利波特》的同学一定对隐身斗篷如数家珍:它是一件能让人隐形的斗篷,永久有效,持续隐形,无论用什么咒语都不可破解,可谓是顶级安全神器。 你瞧: 如今,阿里云也为用户打造了一件世间罕见的“隐身斗篷”:基于Intel SGX(Software Guard Extensions )的“加密计算”。就在前几天,全球信息技术研究机构Gartner发布了2019年云安全技术成熟度曲线报告(Gartner, Hype Cycle for Cloud Security, 2019, Jay Heiser, SteveRiley, 23 July 2019),首次将机密计算(即加密计算)列入其中。阿里云作为亚太区第一个推出基于加密计算的云服务商,被Gartner认可为机密计算的典型云服务商。 2019年,...阅读全文

博文 2019-08-21 16:03:07 阿里云官网

记一次golang读取redis缓存,统计日活的过程

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> 最近有一个需求是从redis缓存中读取日活,redis缓存中保存着每天每个游戏的日活与局数,类型是hashset,key是$game_id:$log_date,value是玩家ID以及对应的局数,结构如下: 表示在2018-07-18日,game_id=1的游戏的日活与对应局数如下: user_id 局数 1 2 2 3 3 4 4 5 虽然能够知道所有的game_id,但是有些游戏可能没有日活,,一个一个game_id去取日活效率不是很高,所以可以执行redis的keys命令来获取有日活的所有key: 然后遍历每个key,调用hgetall命令来获取每个key对应的日活与局数信息,就可以得出每个游戏的日活与...阅读全文

博文 2018-09-01 14:33:14 Valiben

BI团队如何高效应对快速扩张的公司的需求

摘要: 根据提到BI同学两个层次: 第一:我们会接受业务方哪些需求帮他实现需求; 第二:我希望我们这边团队有更多的主动性; 给大家举两个例子,我们在公司的发展过程当中,会把一些成型的东西沉淀下来。上一篇提到,作为数据分析的从业者,在这个公司发展过程当中,给他们的建议。根据提到BI同学两个层次:第一:我们会接受业务方哪些需求帮他实现需求;第二:我希望我们这边团队有更多的主动性;给大家举两个例子,我们在公司的发展过程当中,会把一些成型的东西沉淀下来。第一个例子:节假日当时公司的商户有一定规模之后碰到的第一个节假日,节假日的时候交易会有一定的下降,这是很正常的。因为线下支付的场景,有些人假期的时候在家里。有一些这种商圈,上班期间,有很多这种白领用餐,放假了,有一些人节假日出国旅游了等等。但是节假日...阅读全文

【Golang 基础】Go 语言中的基本类型

Go 语言中的基础类型   在 Go 编程语言中,数据类型用于声明函数和属性。数据类型的出现时为了把数据分成所需要用大数据的时候才需要申请大内存,这样可以充分的列用内存。 数值类型 布尔型bool 布尔型的值只可以是常量 true 或者 false,默认值为 false。 字符串类型string 编码统一为 UTF-8 编码标识 Unicode 文本,默认值为空字符串。 整型(默认值为 0) uint8: 无符号 8 位整型(0 ~ 255); uint16:无符号 16 位整型(0 ~ 65535); uint32:无符号 32 位整型(0 ~ 4294967295); uint64:无符号 64 位整型(0 ~ 18446744073709551615); int8:有符号 8 位整型(...阅读全文

博文 2018-09-26 18:34:40 hvkcoder

golang test说明解读

go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试 通过go help test可以看到go test的使用说明: 格式形如: go test [-c] [-i] [build flags] [packages] [flags for test binary] 参数解读: -c : 编译go test成为可执行的二进制文件,但是不运行测试。 -i : 安装测试包依赖的package,但是不运行测试。 关于build flags,调用go help build,这些是编译运行过程中需要使用到的参数,一般设置为空 关于packages,调用go help packages,这些是关于包的管理,一般设置为空 关于flags for test binary,调用go hel...阅读全文

博文 2014-10-04 19:26:09 yjf512

让我们用 Go 语言创建一个 NTP 客户端

在网络编程做了一些研究之后,我邂逅了一篇题目为《Let's Make a NTP Client in C》,由 David Lettier(Lettier) 编写的文章。这篇文章鼓舞了我用 Go 去做相似的事。 > 这篇博文提到的代码都在这里 [https://github.com/vladimirvivien/go-ntp-client](https://github.com/vladimirvivien/go-ntp-client)。 这篇博文描述了一个(真正的) NTP 客户端的结构,使用 Go 语言编写。它通过 encoding/binary 库去封装,解封装,发送和接收来自远端 NTP 服务器基于 UDP 协议的 NTP 包。 你能通过[这里](http://www.ntp.org...阅读全文

博文 2018-02-03 11:21:13 gogeof

《Golang 入门系列四》golang的基本数据类型

前言:在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 一、数字类型 有符号整数采用2的补码形式表示,也就是最高bit位用来表示符号位,一个n-bit的有符号数的值域是从-2^{n-1}−2​n−1​​到2^{n-1}-12​n−1​​−1。无符号整数的所有bit位都用于表示非负数,值域是0到2^n-12​n​​−1。例如,int8类型整数的值域是从-128到127,而uint8类型整数的值域是从0到255。 1.1 整型 序号 类型和描述 1 uint8: 无符号 8 位整型 (0 到 255) 2 uint16: 无符号 16 位整型 (0 到 65535) 3 ui...阅读全文

博文 2018-02-28 23:33:10 IT--小哥

golang讲解(go语言)标准库分析之io(1)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 今天我们开新的标准库io也是继续上一次我们没有讲完的标准库,上一次我们只说了io/ioutil这次我们继续开讲整个io库 (1)func Copy(dst Writer, src Reader) (written int64, err error)这个函数是从一个文件读取拷贝到另外一个文件,一直拷贝到读取文件的EOF,所以不会返回io.EOF错误,参数是写入目标器和读取目标器,返回int64的拷贝字节数和err信息 [php] import ( "fmt" "io" "os" ) func main() { r, _ := os.Open("test.txt") w, _ := os.Crea...阅读全文

博文 2017-02-09 18:39:38 widuu

io包 copy - golang

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aixinaxc/article/details/88591338 在io包中主要是操作流的一些方法,今天主要学习一下copy。 在io包(golang 版本 1.12)中,提供了3个公开的copy方法:CopyN(),Copy(),CopyBuffer(). CopyN(dst,src,n) 为复制src 中 n 个字节到 dst。 Copy(dst,src) 为复制src 全部到 dst 中。 CopyBuffer(dst,src,buf)为指定一个buf缓存区,以这个大小完全复制。 他们的关系如下: 从图可以看出,无论是哪个copy方法最终都是由copyBuffer()这个私有方法实现的。...阅读全文

博文 2019-03-16 09:54:37 aixinaxc

golang 抽取随机数 随机字符

golang QQ:29295842 欢迎技术交流 go语言返回1-99之间随机数的方法 ```go package main import ( "fmt" "math/rand" ) func main() { max := big.NewInt(100) i, err := rand.Int(rand.Reader, max) } ``` 随机数 ```go package main import "fmt" import "math/rand" func main() { // 例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.I...阅读全文

golang之数据验证validator

前言 在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator。 原理 将验证规则写在struct对字段tag里,再通过反射(reflect)获取struct的tag,实现数据验证。 安装 go get github.com/go-playground/validator/v10 示例 package main import ( "fmt" "github.com/go-playground/validator/v10" ) type Users struct { Phone string `form:"phone" json:"phone" validate:"required"` Passwd string `form:"passwd" ...阅读全文

博文 2020-05-04 16:32:39 guyan0319

golang小程序试验(五)

1. golang的指针 可以将unsafe.Pointer转换成uintptr,然后变相做指针运算 package main import "fmt" import "unsafe" type User struct { Id int Name string } func main() { u := &User{1, "tom"} var up uintptr = uintptr(unsafe.Pointer(u)) + unsafe.Offsetof(u.Name) var name *string = (*string)(unsafe.Pointer(up)) fmt.Println(*name) } 2. package io 实现了io.Reader或io.Writer接口的类型(...阅读全文

博文 2014-10-04 19:27:15 壬癸甲乙

golang-MD5

什么是MD5? MD5:为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321. MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。 下面是在goalng下如何实现md...阅读全文

Go语言核心之美 2.3-复数

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50906571 Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部:var x complex128 = complex(1, 2) // 1+2i var y complex128 = complex(3, 4) // 3+4i fmt.Println(x*y) // "(-5+10i)" fmt.Println(real(x*y)) // "-5" fmt.Pr...阅读全文

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

golang实现NTP协议获取服务器时间

// file project main.go package main import ( "encoding/binary" "fmt" "net" "os" "os/signal" "sync" "time" ) const ( NTP_SERVER_IP = "time.windows.com" /*NTP IP*/ NTP_PORT_STR = "123" /*NTP专用端口号字 符串*/ NTP_PCK_LEN = 48 LI = 0 VN = 3 MODE = 3 STRATUM = 0 POLL = 4 PREC = -6 JAN_1970 = 0x83aa7e80 /* 1900年~1970年之间的时间秒数 */ ) func NTPFRAC(x int64) int64 {...阅读全文

博文 2016-08-04 20:00:14 徐学良

Go语言核心之美 2.6-常量

在Go语言中,常量表达式是在编译期求值的,因此在程序运行时是没有性能损耗的。常量的底层类型是前面提过的基本类型:布尔值,字符串,数值变量。 常量的声明方式和变量很相似,但是常量的值是不可变的,因此在运行期是不可以对常量进行修改的。例如,对于π这种数学常数,常量显然比变量更适合,因为我们不允许这个值发生任何变化:const pi = 3.14159 // 近似值;实际应用请使用math.Pi,更精确 可以同时声明多个常量:const ( e = 2.71828182845904523536028747135266249775724709369995957496696763 pi = 3.141592653589793238462643383279502884197169399375105820...阅读全文

博文 2016-03-23 20:00:01 abv123456789

hash.go-几种 hash 函数实现

接口定义 type Hash interface { // 嵌入了 io.Writer 接口 // 向执行中的 hash 加入更多数据 // hash 函数的 Write 方法永远不会返回 error io.Writer // 把当前 hash 追加到 b 的后面 // 不会改变当前 hash 状态 Sum(b []byte) []byte // 重置 hash 到初始化状态 Reset() // 返回 hash 结果返回的字节数 Size() int // BlockSize 返回 hash 的基础块大小 // 为了提高效率 // Write 方法传入的字节数最好是 blick size 的倍数 BlockSize() int } // 结果为 32bit hash 函数接口 type H...阅读全文

博文 2018-11-07 11:34:43 Y_xx