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

【go】指针的风骚操作(结合unsafe.point与uintptr)

指针是具有类型的 总所周知,声明的变量都是有具体类型的,而对于存储指针的变量是否有类型,有时是一头雾水,在此做一个小总结,指针是具有类型的。 就如: var c int fmt.Println(reflect.TypeOf(c)) d := &c fmt.Println(reflect.TypeOf(d)) 结果: int *int 那可能一些人就会有疑问,指针既然具有类型,那指针之间可以进行类型转换吗。就如下面一样操作 #(*Type)ptr a := (*int)(&xx) 在Go 的指针是不支持指针运算和转换 下面就详细说一下指针类型怎么互相转换 不同类型指针的互相转换 go语言是强语言类型,不同类型,不可以跨类型计算、赋值等操作。 如下: num := 2 p := &num fp ...阅读全文

博文 2020-04-06 21:32:54 dongzaidong

关于写文章的反思

看了一下我之前写的文章,有多少是水篇数?复制别人的列子有多少? 自已真正有心得的,又写了多少? 我过了需要用数量来证明自己的时候了 从今天开始,删掉那些水文,质量不高的,尽可能完善。 我可能写不了多好,但是我要求我写的东西能拿得出手。 补: session及JWT及Oath的使用。 MySql的sql语句优化。 Git遇到的问题及解决方案。 Golang的使用及避坑。 用心点...阅读全文

博文 2018-07-27 09:34:48 送你一碗大麦茶

golang中unsafe包教程

unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Alignof(x ArbitraryType) uintptr unsafe包只有两个类型,三个函数,但是功能很强大。 unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了golang的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。 先简单介绍下Golang指针 *类型:普通...阅读全文

博文 2018-08-06 16:34:48 豆瓣奶茶

TiDB 优化器实现的基础:统计信息的收集

收集统计信息的意义一个 SQL 数据库里,优化器实现的好坏对性能的影响是决定性的。一个未经优化的执行计划和经过充分优化后的执行计划,执行时间的差别往往是成千上万倍。而对一个 SQL 优化器来说,统计信息是必不可少的条件,只有依赖统计信息提供的数据,优化器才可以正确估算不同的执行计划的执行代价,以选择最优的执行计划。就像一个大厨无论多么优秀,没有上等食材也是无法做出美味的饭菜。 统计信息包含的内容 统计信息有两类,包括 Table 统计信息和 Column 统计信息。Table 统计信息包含 Row Count 和 Row Size。Column 统计信息包含 Null Count,Max Value,Min Value,Distinct Count 以及 Histogram。其中 Histo...阅读全文

博文 2017-02-10 02:39:37 PingCAP

golang中bufio包

一、介绍go标准库中的bufio 最近用golang写了一个处理文件的脚本,由于其中涉及到了文件读写,开始使用golang中的 io 包,后来发现golang 中提供了一个bufio的包,使用这个包可以大幅提高文件读写的效率,于是在网上搜索同样的文件读写为什么bufio 要比io 的读写更快速呢?根据网上的资料和阅读源码,以下来详细解释下bufio的高效如何实现的。 bufio 包介绍 bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。 以上为官方包的介绍,在其中我们能了解到的信息如下: bufio 是通过缓冲来提高效率 简单的说就是,把文件读取进缓冲(内存)之后再读取的时...阅读全文

博文 2018-12-02 13:34:44 laijh

fmt.Printf中的格式化动作('verb')

# 源自C语言但更简单 ## 通用: ``` %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 ``` ## 布尔值: ``` %t 单词true或false ``` ## 整数: ``` %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示 %x 表示为十六进制,使用a-f %X 表示为十六进制,使用A-F %U 表示为Unicode格式:U+1234,等价于"U+%04X" ``` ## 浮点数与复数的两个组分: ``` %b 无小数部分、二进制指数的科学计数法,如-123456p...阅读全文

博文 2018-10-03 16:53:53 ace_kylin

05Go语言fmt包详解

Go语言fmt包详解 格式化输出函数 func Print(a ...interface{}) (n int, err error) Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。 func Printf(format string, a ...interface{}) (n int, err error) Printf根据format参数生成格式化的字符串并写入标准输出,返回写入的字节数和遇到的任何错误。 func Println(a ...interface{}) (n int, err error) Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空...阅读全文

从零学习 Go 语言(03):数据类型之整型与浮点型

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 **系列导读 ** [从零学习 Go 语言(01):一文搞定开发环境的搭建](https://studygolang.com/articles/27365) [从零学习 Go 语言(02):学习五种变量创建的方法](https://studygolang.com/articles/27432) --- ## 1. 整型...阅读全文

博文 2020-03-24 19:39:27 hello_wbm

Golang中使用Date进行日期格式化(沿用Java风格)

Github https://github.com/noogo/date Date Date是一个基于time包装的一个日期包,通过此包可以快速创建日期、获取时间戳、毫秒数及最重要的日期格式化,另外你还可以继续使用time包下的所有函数(除time.Foramt(string)外)你可以通过以下方法快速创建一个Date对象: Now() WithTime(t time.Time) WithTimestamp(timestamp int64) WithMillisecond(millisecond int64) WithDate(year, month, date, hour, minute, second int) Note:你可以通过Date.Format(String,...bool)方...阅读全文

博文 2020-04-29 12:32:45 Keson

golang中encoding/base32包

1、golang中base32包是什么? 2、base32给我们开发者提供了什么?以及用法? 3、编码与解码各有哪几种操作? 一、golang中base32包是什么? 这个包实现了 RFC 4648 定义的 base32 编码。 二、base32给我们开发者提供了什么? 变量: RFC 4648 定义的标准 base32 编码。 var StdEncoding = NewEncoding(encodeStd) RFC 4648 里定义的"Extended Hex Alphabet",一般用于DNS var HexEncoding = NewEncoding(encodeHex) 函数: 1)func NewDecoder(enc *Encoding, r io.Reader) io.Read...阅读全文

博文 2018-12-11 17:34:49 laijh

Golang学习笔记之字符串(string)

在 Go 中字符串是 byte 数组。可以通过将内容放在双引号 "" 之间的方式来创建一个字符串。字符串是不可变值类型,内部⽤指针指向 UTF-8 字节数组。 • 默认值是空字符串 ""。 • ⽤索引号访问某字节,如 s[i]。 • 不能⽤序号获取字节元素指针, &s[i] ⾮法。 • 不可变类型,⽆法修改字节数组。 • 字节数组尾部不包含 NULL。 runtime.h struct String { byte* str; intgo len; }; (1)使⽤索引号访问字符 。 s := "abc" fmt.Println(s[0]) //97 fmt.Printf("%c\n", s[0]) //a fmt.Println(s[0] == '\x61', s[1] == 'b', s[...阅读全文

博文 2018-12-08 11:34:46 学生黄哲

4. Go语言中byte、rune与字符串区别?

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读 1. 一文搞定Go语言开发环境的搭建 2. Go 语言中五种变量创建的方法 3. Go语言中的整型与浮点型 1. byte 与 rune byte,占用1个节字,就 8 个比特位,所以它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。 如下这段代码,分别定义了 byte 类型和 uint8 类型的变量 a 和 b import "fmt" func main() { var a byte = 65 // 8进制写法: var c byte = '\101' 其中 \ 是固定前缀 ...阅读全文

博文 2020-03-31 11:34:44 王一白

Go36-38,39-bytes包

基本操作 bytes包和strings包非常相似,单从它们提供的函数的数量和功能上看,差别微乎其微。 strings包主要是面向Unicode字符和经过UTF-8编码的字符串,而bytes包主要是面对字节和字节切片。 bytes.Buffer类型 Buffer类型的用途主要是作为字节序列的缓冲区。 bytes.Buffer是开箱即用的。可以进行拼接、截断其中的字节序列,以各种形式导出其中的内容,还可以顺序的读取其中的子序列。所以是集读、写功能与一身的数据类型,这些也是作为缓冲区应该拥有的功能。 在内部,bytes.Buffer类型使用字节切片(bootstrap字段)作为内容容器。还有一个int类型(off字段)作为已读字节的计数器,简称为已读计数。不过这里的已读计数是不无获取也无法计算得到...阅读全文

博文 2019-02-03 10:35:13 骑士救兵

golang实现延时队列基本原理

主要参考了文章: https://www.cnblogs.com/jkko123/p/7239420.html 更进一步的设计需要参考(未完成) https://tech.youzan.com/queuing_delay/ package main import ( "errors" "fmt" "time" ) const cicleSectionNum = 10 type TaskFunc func(args ...interface{}) //任务 type Task struct { runTime time.Time //初次运行时间 cycleNum int //需要第几圈 curIndex int //当前运行到第几格 //执行的函数 exec TaskFunc params ...阅读全文

博文 2019-07-25 16:32:55 成木2016

Golang bytes.buffer详解

Buffer 介绍 Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用) Buffer 就像一个集装箱容器,可以存东西,取东西(存取数据) 创建缓冲器 func main() { buf1 := bytes.NewBufferString("hello") buf2...阅读全文

博文 2019-01-28 15:34:49 小马哥_Magical

Go语言学习笔记3

3.Go语言数据类型 其实前面已经涉及到了数据类型的一些知识点。本篇将仔细地讲讲Go语言的数据类型。 3.1 基本数据类型 名称 宽度(字节) 零值 说明 bool 1 false 布尔类型,真用常量true表示,假用常量false表示 byte 1 0 字节类型,可看作uint8的别名类型 rune 4 0 rune类型,专门存储Unicode编码,可看作uint32的别名类型 int/uint - 0 有符号整数类型/无符号整数类型,宽度与平台相关 int8/uint8 1 0 由8位二进制数表示的有符号整数类型/无符号整数类型 int16/uint16 2 0 由16位二进制数表示的有符号整数类型/无符号整数类型 int32/uint32 4 0 由32位二进制数表示的有符号整数类型/...阅读全文

博文 2016-09-05 09:01:00 u012855229

goLang 文件操作之二

文件读写 1.1 复制文件 package main import ( "os" "log" "io" ) func main(){ //打开原始文件 originalFile,err:=os.Open("test.txt") checkErr(err) defer originalFile.Close() //创建新的文件作为目标文件 newFile,err:=os.Create("test_copy.txt") checkErr(err) defer newFile.Close() //从源中复制字节到目标文件 bytesWritten,err:=io.Copy(newFile,originalFile) checkErr(err) log.Printf("copied %d bytes...阅读全文

博文 2018-02-07 15:34:38 soledad

4. golang的整数和浮点数以及bool类型

一, 整数 整数,就是存放整数值的,如0, -1, 800等 整数的类型: 类型 有无符号 占用存储空间 值范围 备注 int8 有 1字节 -2^7 ~ 2^-1 int16 有 2字节 -2^15 ~ 2^15 -1 int32 有 4字节 -2^31 ~ 2^31 -1 int64 有 8字节 -2^63 ~ 2^63 -1 uint8 无 1字节 0 ~ 2^8 - 1 uint16 无 2字节 0 ~ 2^16 - 1 uint32 无 4字节 0 ~ 2^32 - 1 uint64 无 8字节 0 ~ 2^64 - 1 int 有 32位系统4个字节 64位系统8个字节 参考int32和int64 uint 无 32位系统uint32 64系统uint64 参考uint32和ui...阅读全文

博文 2020-01-22 17:32:44 瓦灯_c6f0

Go语言笔记 | 03-变量的声明和初始化

Go语言笔记 | 03-变量的声明和初始化 变量声明 在 go 语言中声明一个变量一般要用到关键字 var,变量声明的语法:var 变量名 类型 = 表达式。 在声明变量时将变量的类型放在变量的名称之后,和 c 语言不太一样,原因可以参考go 声明语法。 声明一个变量 var i int // 0 声明一个变量列表,同类型的变量 var a, b, c string // "", "", "" 声明一组变量,不同类型的变量 var ( str string // "" avg, sum float32 // 0.0, 0.0 ) 未初始化的变量,系统会自动赋予该类型的零值 变量零值 当一个变量被声明之后,系统自动赋予它该类型的零值 bool 的零值为 false 整数的零值为 0 浮点数的零...阅读全文

博文 2019-01-23 21:34:40 jianggushi

第三章 整形

golang数值类型包括:整形数,浮点数,复数。(不同大小,是否支持正负都是不同类型) 整形 包括有符号的整形 int8 int16 int32 int64以及对应的无符号整形数 uint8 uint16 uint32 uint64 这里面的数字 8,16,32,64对应的是计算机位数 。 这里对应有特定平台的有符号int型与无符号uint型 这两种类型是根据CPU的处理位数来确定对应大小的 uintptr 没有指定大小,但是可以容纳指针。 有符号整形 以最高位代表符号位,超出会导致值为相反符号数 例如 int8 127+1 = -128 在golang中取模运算%的符号总是和被取模数的符号一致 例如: -5%3 与-5%-3 的结果都是 -2 除法运算符 / 的行为依赖于操作数是否全为证书...阅读全文

博文 2018-11-13 00:34:40 zhaoxi_yu

Golang学习 - strconv 包

// 将布尔值转换为字符串 true 或 false func FormatBool(b bool) string // 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False // 其它任何值都返回一个错误。 func ParseBool(str string) (bool, error) // ErrRange 表示值超出范围 var ErrRange = errors.New("value out of range") // ErrSyntax 表示语法不正确 var ErrSyntax = errors.New("invalid syntax") // 将整数转换为字符串形...阅读全文

博文 2019-04-21 22:34:41 佛心看世界

AC GO GO GO!!!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/code12hour/article/details/46809457 新学期开始了,要继续哦 小紫书上的一道很烦的题:Uva 11809 Flloating-Point Numbers 要做的: CDOJ 1139 菲波拉契数制升级版 CDOJ 1301 Find the Stuff 未做的: HDU 5179 HDU 4788 ZOJ 3542 搜索: POJ 1606 HDU 5094 HDU 5077 HDU 4394 DP: POJ 3254 Corn Fields POJ 1185 炮兵阵地 CF 165E Compatible Numbers HDU 5045 Contes...阅读全文

博文 2018-08-27 14:31:05 code12hour

Bufio中的一些疑问

各位大神可以帮忙解读下面的代码吗?菜鸟刚写,有的地方了解得不透 万分感激 ```go func main() { sr := strings.NewReader("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") buf := bufio.NewReaderSize(sr, 0) b := make([]byte, 10) //返回缓存区,未读取的数据长度 fmt.Println(buf.Buffered()) s, _ := buf.Peek(5) s[0], s[1], s[2] = 'a', 'b', 'c' fmt.Printf("%d %q\n", buf.Buffered(), s) b...阅读全文

Golang 读、写文件

文件的读写是编程语言的常见操作之一,这里将Goang 读取文件的相关操作。 读取文件 读取文件有三种方式: 将文件整个读入内存 按字节数读取 按行读取 具体实现如下: 1、将文件整个读入内存 package main import ( "os" "io/ioutil" "fmt" ) func main() { file, err := os.Open("D:/gopath/src/golang_development_notes/example/log.txt") if err != nil { panic(err) } defer file.Close() content, err := ioutil.ReadAll(file) fmt.Println(string(content)) ...阅读全文

博文 2019-01-16 21:34:41 jerry

Go语言 碎片整理之 文件操作

文件是什么?计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。 打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个error。对得到的文件实例调用close()方法能够关闭文件。 func main(){ file,err := os.Open("./main.go") if err != nil{ fmt.Println("open file failed!,err",err) return } fmt.Println("cool!") file.Close() } 为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。 读取文件 file.Read() 基本使用 Read的方法定义如下:func(f *File)...阅读全文

博文 2019-06-04 00:33:13 霍帅兵

golang标准库之strconv

字符串转整型 package main import ( "fmt" "strconv" ) func main() { //字符串转为整数 s := "128" // func ParseInt(s string, base int, bitSize int) (i int64, err error) // 返回字符串表示的整数值,接受正负号。 // base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制; // bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64; // 返回的err是*NumErr类型的,如果语法有误,err.Erro...阅读全文

博文 2019-10-04 15:32:45 aside section ._1OhGeD

Go语言学习笔记3

3.Go语言数据类型 其实前面已经涉及到了数据类型的一些知识点。本篇将仔细地讲讲Go语言的数据类型。 3.1 基本数据类型 名称 宽度(字节) 零值 说明 bool 1 false 布尔类型,真用常量true表示,假用常量false表示 byte 1 0 字节类型,可看作uint8的别名类型 rune 4 0 rune类型,专门存储Unicode编码,可看作uint32的别名类型 int/uint - 0 有符号整数类型/无符号整数类型,宽度与平台相关 int8/uint8 1 0 由8位二进制数表示的有符号整数类型/无符号整数类型 int16/uint16 2 0 由16位二进制数表示的有符号整数类型/无符号整数类型 int32/uint32 4 0 由32位二进制数表示的有符号整数类型/...阅读全文

博文 2016-09-08 09:00:48 u012855229

Golang学习(3)——bytes包

Golang学习 - bytes 包--------------------对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本,要么是参数的切片。// 转换: 将 s 中的所有字符修改为大写(小写、标题)格式返回。func ToUpper(s []byte) []bytefunc ToLower(s []byte) []bytefunc ToTitle(s []byte) []byte// 使用指定的映射表将 s 中的所有字符修改为大写(小写、标题)格式返回。func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []bytefunc ToLowerSpecial(_case unicode.SpecialC...阅读全文

博文 2017-02-09 18:26:10 1160636144

Go语言实战笔记(十九)| Go Writer 和 Reader

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。 输入和输出Go Writer 和 Reader接口的设计遵循了Unix的输入和输出,一个程序的输出可以是另外一个程序的输入。他们的功能单一并且纯粹,这样就可以非常容易的编写程序代码,又可以通过组合的概念,让我们的程序做更多的事情。 比如我们在上一篇的Go log日志 http://www.flysnow.org/2017/05/06/go-in-action-go-log.html 中,就介绍了Unix的三种输入输出输入模式,他们对应的Go语言里有专门的实现。 12345var ( Stdin ...阅读全文

博文 2017-08-28 02:53:41 飞雪无情

结合 Go 读 APUE-基本文件I/O

在公众号 "别捉急" 上 同步了文章,并且可以点击原文链接阅读:传送门 基本的文件 I/O 我想 open, read, write, lseek, close 这个几个操作就满足了对文件操作的基本需求。当然了,我也是看书是这么写的。 每个语言基本都有对应的函数或方法,我们调用就行,在这种情况下,我们可以理解成 -> 语言就是个工具。我比较偏向 Go 的风格,所以这里我以 Go 的函数库为例,但在介绍其之前,要明白一个概念:文件描述符。 画中重点了: 对于内核而言, 所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。 对上面的描述还是有点模糊呢? 当打开一个现有文件或创建一个新的文件时,内核向进程返回一个 文件描述符。 当读、写一个文件时,使用 open 或 create 返回的...阅读全文

博文 2017-11-04 01:29:16 x_zhaohu

Go基础系列:简单数据类型

每一个变量都有数据类型,Go中的数据类型有: 简单数据类型:int、float、complex、bool和string 数据结构或组合(composite):struct、array、slice、map和channel 接口(interface) 当声明变量的时候,会做默认的赋0初始化。每种数据类型的默认赋0初始化的0值不同,例如int类型的0值为数值0,float的0值为0.0,string类型的0值为空"",bool类型的0值为false,数据结构的0值为nil,struct的0值为字段全部赋0。 其实函数也有类型,不过一般称之为返回类型。例如,下面的函数foo的返回类型是int: func foo() int { ...CODE... return INT_TYPE_VALUE } 函...阅读全文

博文 2018-11-23 09:10:24 f-ck-need-u

Golang walkthrough: io package

Golang walkthrough: io package Go是用于处理字节的编程语言。 无论您有字节列表,字节流还是单个字节,Go都可以轻松处理。 从这些简单的原语,我们构建了我们的抽象和服务。 io包是标准库中最基础的包之一。 它提供了一组用于处理字节流的接口和助手。 这篇文章是一系列演练的一部分,可以帮助您更好地了解标准库。 虽然官方的文档提供了大量的信息,但是在现实世界的环境中还是很难理解库的意思。 本系列旨在提供如何在每天应用程序中使用标准库包的上下文。 如果您有任何问题或意见,可以在Twitter上的@benbjohnson与我联系。(当然也可以联系我,listomebao@gmail.com) Reading bytes 字节有两个最基本的操作,读和写。让我们先看如何读字节...阅读全文

博文 2018-01-16 13:39:52 sheepbao.github.io

Go 字符串格式化

文地址:https://www.kancloud.cn/itfanr/go-by-example/81647 Go对字符串格式化提供了良好的支持。下面我们看些常用的字符串格式化的例子。 package main import "fmt" import "os" type point struct { x, y int } func main() { // Go提供了几种打印格式,用来格式化一般的Go值,例如 // 下面的%v打印了一个point结构体的对象的值 p := point{1, 2} fmt.Printf("%v\n", p) // 如果所格式化的值是一个结构体对象,那么`%+v`的格式化输出 // 将包括结构体的成员名称和值 fmt.Printf("%+v\n", p) // `...阅读全文

博文 2020-02-12 18:33:15 1350368559

golang入门案例之SOCKET

//服务端代码package main import ( "fmt" "net" "log" "os" "encoding/binary" ) func main() { //建立socket,监听端口 netListen, err := net.Listen("tcp", "localhost:8090") CheckError(err) defer netListen.Close() Log("Waiting for clients") for { conn, err := netListen.Accept() if err != nil { continue } Log(conn.RemoteAddr().String(), " tcp connect success") handle...阅读全文

博文 2018-01-17 19:30:00 nazhizq

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 Hash3...阅读全文

博文 2018-11-08 14:35:55 Csdoker

Golang学习(8)——io 包

Golang学习 - io 包--------------------先说一下接口,Go 语言中的接口很简单,在 Go 语言的 io 包中有这样一个函数:func ReadFull(r Reader, buf []byte) (n int, err error)这个函数可以把对象 r 中的数据读出来,然后存入一个缓冲区 buf 中,以便其它代码可以处理 buf 中的数据。这里有个问题,ReadFull 函数究竟可以读取哪些对象的数据?可以读文件中的数据吗?可以读网络中的数据吗?可以读数据库中的数据吗?可以读磁盘中的扇区吗?可以读内存中的数据吗?答案是: ReadFull 可以读取任何对象的数据,但是有个前提,就是这个对象必须符合 Reader 的标准。Reader 的标准是什么呢?下面是 R...阅读全文

博文 2017-02-09 18:26:37 1160636144

《Go语言四十二章经》第三十一章 文件操作与IO

《Go语言四十二章经》第三十一章 文件操作与IO 《Go语言四十二章经》第三十一章 文件操作与IO 作者:李骁 ## 31.1 文件系统 对于文件和目录的操作,Go主要在os 提供了的相应函数: ```go func Mkdir(name string, perm FileMode) error func Chdir(dir string) error func TempDir() string func Rename(oldpath, newpath string) error func Chmod(name string, mode FileMode) error func Open(name string) (*File, error) { return OpenFile(name, ...阅读全文

博文 2018-10-13 20:26:30 roteman

go tool pprof 字段翻译

一直对 go tool pprof xxx.prof字段不是很了解,群里人发了官方文档,翻一下做个记录 (pprof) top10 Total: 2525 samples 298 11.8% 11.8% 345 13.7% runtime.mapaccess1_fast64 268 10.6% 22.4% 2124 84.1% main.FindLoops 251 9.9% 32.4% 451 17.9% scanblock 178 7.0% 39.4% 351 13.9% hash_insert 131 5.2% 44.6% 158 6.3% sweepspan 119 4.7% 49.3% 350 13.9% main.DFS 96 3.8% 53.1% 98 3.9% flushptr...阅读全文

博文 2019-08-19 20:02:47 云南厨子

Go语言学习笔记3

3.Go语言数据类型 其实前面已经涉及到了数据类型的一些知识点。本篇将仔细地讲讲Go语言的数据类型。 3.1 基本数据类型 名称 宽度(字节) 零值 说明 bool 1 false 布尔类型,真用常量true表示,假用常量false表示 byte 1 0 字节类型,可看作uint8的别名类型 rune 4 0 rune类型,专门存储Unicode编码,可看作uint32的别名类型 int/uint - 0 有符号整数类型/无符号整数类型,宽度与平台相关 int8/uint8 1 0 由8位二进制数表示的有符号整数类型/无符号整数类型 int16/uint16 2 0 由16位二进制数表示的有符号整数类型/无符号整数类型 int32/uint32 4 0 由32位二进制数表示的有符号整数类型/...阅读全文

博文 2016-09-08 10:00:03 u012855229

go语言的文件简单的操作

Golang读写文件操作 1、读文件 使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。 使用ioutil直接读取需要引入io/ioutil包,该包默认拥有以下函数供用户调用。 func NopCloser(r io.Reader) io.ReadCloser func ReadAll(r io.Reader) ([]byte, error) func ReadDir(dirname string) ([]os.FileInfo, error) func ReadFile(filename string) ([]byte, error) func TempDir(dir, prefix string) (name string, err error) func Tem...阅读全文

博文 2019-05-30 19:35:11 qq5c9c828bc8d4b

老虞学GoLang笔记-变量声明与初始化

开发十年,就只剩下这套Java开发体系了 >>> 变量声明 官方DOC: http://golang.org//spec#Variable_declarations Go中使用全新的关键字var来声明变量。var我们并不陌生,在Javascript 和C#中均有出现。不同的是Go和C#中变量属于强类型,在声明变量后就不允许改变其数据类型。 声明变量有多种形态: var a int //声明一个int类型的变量 var b struct { //声明一个结构体 name string } var a = 8 //声明变量的同时赋值,编译器自动推导其数据类型 var a int = 8 //声明变量的同时赋值 var { //批量声明变量,简洁 a int b string } 变量初始化 变量...阅读全文

Go的内存对齐和指针运算详解和实践

#### uintptr 和 unsafe普及 ##### uintptr 在Go的源码中uintptr的定义如下: ```go /* uintptr is an integer type that is large enough to hold the bit pattern of any pointer. 从英文注释可以看出 uintptr是一个整形,它的大小能够容纳任何指针的位模式,它是无符号的,最大值为:18446744073709551615,怎么来的,int64最大值 * 2 +1 */ type uintptr uintptr ``` **位模式**:内存由字节组成.每个字节由8位bit组成,每个bit状态只能是0或1.所谓位模式,就是变量所占用内存的所有bit的状态的序列 *...阅读全文

博文 2020-01-09 09:28:40 SunPengWei

Golang学习 - unicode/utf8 包

// 编码所需的基本数字 const ( RuneError = '\uFFFD' // 错误的 Rune 或 Unicode 代理字符 RuneSelf = 0x80 // ASCII 字符范围 MaxRune = '\U0010FFFF' // Unicode 码点的最大值 UTFMax = 4 // 一个字符编码的最大长度 ) // 将 r 转换为 UTF-8 编码写入 p 中(p 必须足够长,通常为 4 个字节) // 如果 r 是无效的 Unicode 字符,则写入 RuneError // 返回写入的字节数 func EncodeRune(p []byte, r rune) int // 解码 p 中的第一个字符,返回解码后的字符和 p 中被解码的字节数 // 如果 p 为空,则...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

Golang学习 - strconv 包

// 将布尔值转换为字符串 true 或 false func FormatBool(b bool) string // 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False // 其它任何值都返回一个错误。 func ParseBool(str string) (bool, error) ------------------------------ // ErrRange 表示值超出范围 var ErrRange = errors.New("value out of range") // ErrSyntax 表示语法不正确 var ErrSyntax = errors.New(...阅读全文

如何用Redis实现一个指定时间的限速器

使用Redis的Incr可以很容易的实现一个限速器 在redis的官方文档中也有详细的示例 FUNCTION LIMIT_API_CALL(ip) ts = CURRENT_UNIX_TIME() keyname = ip+":"+ts current = GET(keyname) IF current != NULL AND current > 10 THEN ERROR "too many requests per second" END IF current == NULL THEN MULTI INCR(keyname, 1) EXPIRE(keyname, 1) EXEC ELSE INCR(keyname, 1) END PERFORM_API_CALL() 举个例子: 现有一个...阅读全文

博文 2019-01-25 19:34:43 dom_chan

Float的基本介绍

关于浮点数,为什么它生来就可能存在误差?带着好奇查阅了一些介绍,然后做了简单汇总。这只是一段知识的开始,后续还会继续完善。—— 荡荡上帝,下民之辟。疾威上帝,其命多辟。天生烝民,其命匪谌。靡不有初,鲜克有终。 Floating-point represent 浮点数在计算机中是如何表示的?因为它有小数点,那么小数点后面的数,该如何用二进制来表示呢?我们都知道,浮点数本身就存在误差,在工作中,你所使用的float都是一个近似数。这又是什么原因导致的呢? 1. Fixed-point fixed-point 是将bit位拆分成固定的两部分:小数点前的部分和小数点后的部分。拿32 bit的fixed-point表示举例,可以将其中的24 bit用于表示整数部分,剩余的8 bit表示小数部分。 假如...阅读全文

MAY-Lesson 1

笔记 - unsafe Package unsafe contains operations that step around the type safety of Go programs. Packages that import unsafe may be non-portable and are not protected by the Go 1 compatibility guidelines. unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了golang的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。 unsafe.Sizeof Sizeof ...阅读全文

博文 2019-05-22 17:34:53 夜空一起砍猩猩

浮点数格式化输出的原理是什么?

fmt.Printf("1.8350 => %.2f\n",float64(1.835)) fmt.Printf("1.8450 => %.2f\n",float64(1.845)) fmt.Printf("5.8350 => %.2f\n",float64(5.835)) fmt.Printf("5.8450 => %.2f\n",float64(5.845)) fmt.Printf("7.8350 => %.2f\n",float64(7.835)) fmt.Printf("7.8450 => %.2f\n",float64(7.845)) fmt.Printf("8.8350 => %.2f\n",float64(8.835)) fmt.Printf("8.8450 => %.2f\n...阅读全文

博文 2020-05-18 20:43:21 Y-dc

《Go语言四十二章经》第二十八章 unsafe包

《Go语言四十二章经》第二十八章 unsafe包 作者:李骁 ## 28.1 unsafe 包 ```go func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType ``` 这个包中,只提供了3个函数,两个类型。就这么少的量,却有着超级强悍的功能。学过C语言的都可能比较清楚,通过指针,知道变量在内存中占用的字节数,就可以通过指针加偏移量的操作,在地址中,修改,访问变量的值。在Go 语言中,怎么去实现这么疯狂的操作呢?就得靠u...阅读全文

博文 2018-10-12 20:37:14 roteman