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

golang之redis入门: hash表

import ( "fmt" "github.com/garyburd/redigo/redis" ) /* hash的一些基本操作: hset hash field value 将哈希表hash中域 field 的值设置为 value 如果哈希表不存在, 那么将创建并写入, 如果存在则更新hash表中的数据 eg: 127.0.0.1:6379> hset website google www.g.cn (integer) 1 127.0.0.1:6379> hget website google "www.g.cn" hsetnx hash field value 当且仅当域field不存在于哈希表中的时候,将值设置为value 如果表不存在 则创建并执行写入field value eg...阅读全文

博文 2019-06-27 20:02:43 五知小白羊

对 Go 中长时间运行 io.Reader 和 io.Writer 的操作测算进度和估算剩余时间

![img](https://raw.githubusercontent.com/studygolang/gctt-images/master/reader-writer/1_YfQ0FQIK4l6NMW3wsl9NNw.jpeg) 每当我们在使用类似 io.Copy 和 ioutil.ReadAll 的工具时,比如我们正在从 http.Response 主体读入或者上传一个文件,我们会发现这些方法将一直堵塞,直到整个过程完成,哪怕耗时数十分钟甚至是小时——而且我们没有办法来查看进度,以及计算出完成所需剩余时间的估测值。 本文很长,不想深究瞅这里:这篇文章最终导向 progress 包,你可以在自己的项目中自由使用——https://github.com/machinebox/progres...阅读全文

博文 2018-03-09 19:42:28 polaris

go--读取文件的方式

package main import ( "bufio" "fmt" "io" "io/ioutil" "os" "testing" ) const fileName = "README.md" //按照处理的字节数读取 func TestReadFilr(t *testing.T) { file, err := os.Open(fileName) if err != nil { t.Error(err) } buffer := make([]byte, 1024) for { if a, b := file.Read(buffer); a != 0 && b != io.EOF { fmt.Println(b) } else { return } } } // 一次性读取 func Te...阅读全文

博文 2018-10-23 22:34:38 FIZLIN

golang 中的 io包

一些抽象化的接口 读相关 名称 作用 备注 Read 读接口 1 ReadCloser 读接口(包含 Close接口) 2 ReadSeeker 从哪里读到哪里 3 ReaderAt 从一定距离开始读 4 ReaderFrom 包含 ReadForm方法,读到Eof 或 error停止。返回读到的字节数 5 写相关 名称 作用 备注 Writer 读接口 1 WriteCloser 读接口(包含 Close接口) 2 WriteSeeker 从哪里读到哪里 3 WriterAt 从一定距离开始读 4 WriterTo 包含 WriterTo 方法,读到Eof 或 error停止。返回写入的字节数 几个函数方法 1. Copy (内部实现了 ReaderFrom 和 WriterTo 接口) ...阅读全文

博文 2017-07-09 06:03:50 中柠檬

深入Go语言 - 13 反射

目录 [−] TypeValue转换 本章重点介绍Go语言中的反射。包reflect可以实现运行时的反射,允许程序操纵对象的值和类型。典型地,你可以获取 interface{}的动态类型以及的它的值和方法。 Go是静态类型的语言,每一个对象在声明和初始化的时候都已经有一个确定值,即使是声明为接口类型的变量,它的静态类型也已经确定,即使任何包含这个接口方法集的类型的对象都可以赋值给它。 我们可以在运行时获取对象的动态类型和值。 类型Type和值Value是我们使用发射库的主要用的两个概念。 Type Type是一个interface,代表Go中的一个类型,可以把它看成某个类型的元数据(描述类型的类型),这个类型既可以是Go语言或者库中定义的type类型,也可以你自己定义的type类型。 下面我...阅读全文

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

TLS1.3 协议的Golang 实现——ClientHello

前言 撰写本文时TLS1.3 RFC 已经发布到28版本。以前写过一点密码学及TLS 相关的文章,为了更深入理解TLS1.3协议,这次将尝试使用Go语言实现它。网络上已有部分站点支持TLS1.3,Chrome浏览器通过设置可支持TLS1.3 (draft23),利用这些条件可验证,我们实现的协议是否标准。 完整的实现TLS1.3 工作量很大,概念和细节非常多(感觉又在挖坑)。本文首先会从ClientHello开始,后续可能会考虑 :Authentication、Cryptographic Computations、0-RTT 。 5G 未来 每次基础设施的升级都是时代变革的前奏。 在移动互联网2G/3G时代,很多创新都约束在了Wifi 下;移动互联网进入4G时代后,爆发了各种直播、短视频等创...阅读全文

博文 2018-07-02 21:35:45 云栖技术

Go内存泄漏?不是那么简单!

最近遇到一个Go内存不释放的问题,记录一下测试和调研的情况。我到不把它归为Go内存泄漏的问题,因为它和一般的内存泄漏的方式不同。 Go 常见内存泄漏的情况 Go程序可能会在一些情况下造成内存泄漏。go101网站总结了各种内存泄漏的情况,我在这里简单罗列一下: 获取长字符串中的一段导致长字符串未释放 同样,获取长slice中的一段导致长slice未释放 在长slice新建slice导致泄漏 goroutine泄漏 time.Ticker未关闭导致泄漏 Finalizer导致泄漏 Deferring Function Call导致泄漏 内存回收分析 实际问题 写这篇文章的初衷是我在实现一个新项目的时候遇到一个问题。这个项目使用了一个缓存组件对请求的结果进行缓存,以提高请求的耗时。这个缓存组件对使...阅读全文

博文 2019-08-31 14:37:18 smallnest

Go 调度器的任务窃取(Work-Stealing)

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-work-stealing-in-go-Scheduler/cover.png) > Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French. ℹ️ *这篇文章基于 Go 1.13 环境。* 在 Go 中创建 gorotine 既方便又快捷,然而 Go 在同一时间内最多在一个核上运行一个 gorotine,因此需要一种方法来存放其他的 gorotine,从而确保处理器(processor)负载均衡。 ...阅读全文

博文 2020-03-12 21:43:51 LSivan

go语言对称加密算法

package main import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/des" ) // des的CBC加密 // 编写填充函数, 如果最后一个分组字节数不够, 填充 // ......字节数刚好合适, 添加一个新的分组 // 填充个的字节的值 == 缺少的字节的数 func paddingLastGroup(plainText []byte, bloclSize int) []byte { // 1. 求出最后一个组中剩余的字节数 28 % 8 = 3...4 32 % 8 = 4 ...0 padNum := bloclSize - len(plainText) % bloclSize // 2. 创建新的切片, 长度 ==...阅读全文

博文 2019-10-16 10:02:43 吾爱美人

golang讲解(go语言)标准库分析之os(7)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天我们继续讲golang标准库的os包,依然是没有废话直接来 (1)(f *File).Name()这个函数是返回文件的名称,函数原型func (f *File) Name() string要文件的指针操作,返回字符串,感觉比较鸡助的方法底层实现 [php] func (f *File) Name() string { return f.name } import ( "fmt" "os" ) func main() { f, _ := os.Open("1.go") fmt.Println(f.Name()) //输出1.go } [/php] (2)(f *File)...阅读全文

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

【golang】调优工具 pprof

CPU Profiling Golang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数据可以被 pprof 工具(或者 go tool pprof,其为 pprof 的变种)使用。通常我们这样来使用 pprof 包: // 定义 flag cpuprofile var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") func main() { flag.Parse() // 如果命令行设置了 cpuprofile if *cpuprofile != "" { // 根据命令行指定文件名创建 profile 文件 f, err := os.C...阅读全文

博文 2017-10-27 13:01:33 zhonglinzhang

Go语言核心之美 2.3-复数

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.Println(imag(x*y)) // "10" 如果一个浮点数的字面量后面跟着一个i,例如3.141592i或2i,那么它将变成一个复数的虚部,这个复数的实部是0:fmt.Print...阅读全文

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

go testing

官方文档 点击打开链接 demo 如下: add.go package simplemath func Add(a int, b int) int { return a + b } add_test.go package simplemath import "testing" /** 在任意目录下运行单元测试如下 go test simplemath */ func TestAdd1(t *testing.T) { r := Add(1, 2) if r != 3 { t.Errorf("Add(1, 2) failed . Got %的, expect 3. ", r) } } 运行: go test simplemath 输出: ok simplemath 0.005...阅读全文

博文 2016-10-13 14:00:02 robert198837

老虞学GoLang笔记-字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样,字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 字符串操作 编码过程中避免不了中文字符,那我们该如何提取一个中文呢?首先我们要知道string[index]获取的是字符byte,就无法像C#中"老虞"[0]来取到‘老’,在Go中需要将字符串转换成rune数组,ru...阅读全文

博文 2015-07-21 15:00:02 Gopher老虞

Golang学习(5)——strconv包

Golang学习 - strconv 包--------------------// 将布尔值转换为字符串 true 或 falsefunc 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 ErrS...阅读全文

GO-ruantime

runtime 包 提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明与代码演示 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设置cup profile 记录的速录 6.查看cup profile 下一次堆栈跟踪数据 7.立即执行一次垃圾回收 8.给变量绑定方法,当垃圾回收的时候进行监听 9.查看内存申请和分配统计信息 10.查看程序正在使用的字节数 11.查看程序正在使用的对象数 12.获取调用堆栈列表 13.获取内存profile记录历史 14.执行一个断点 15.获取程序调用go协程的栈踪迹历史 16.获取当前函数或者上层函数的标识号、文件名、调用...阅读全文

博文 2018-09-20 23:35:13 wx5ba3323aac676

Go基本数据类型

Go语言中给我们提供的所有基本数据类型,我们应该理解如何在自己的Go程序中使用这些类型。 数据类型Go语言将数据类型分为四类:Basic Types(基础类型)、Aggregate Types (复合类型)、Reference Types (引用类型)、Interface Types (接口类型)。 基础类型包括:数字、字符串和布尔型。布尔型的值只可以是常量 true 或者 false。数字类型支持整型和浮点型,并且支持复数,其中位的运算采用补码。 复合数据类型包括:数组、结构体是通过组合简单类型,来表达更加复杂的数据结构。 引用类型包括:指针、slice、map、 channel、接口和函数类型。当声明引用类型的变量时,创建的变量被称作标头(header)值。从技术细节上说,字符串也是一种...阅读全文

博文 2020-02-25 15:32:45 公子邪o

golang标准库io

本文主要为学习《Go语言标准库》https://books.studygolang.com/The-Golang-Standard-Library-by-Example的笔记 Go语言中的IO操作封装在以下4个包中: 1) io: 为IO原语(I/O primitives)提供基本的接口。 2) io/ioutil: 封装一些实用的I/O函数。 3) fmt: 实现格式化I/O。 4) bufio: 实现带缓冲I/O。 1. io——基本的IO接口 该包主要内容是定义了很多io相关的interface,作为标准库中其它函数的参数出现,其中最基础重要的两个接口是io.Reader和io.Writer。 type Reader interface { Read(p []byte) (n int,...阅读全文

博文 2018-08-10 18:30:03 xiaochuizi

小白求助 退出登录时点击链接自动跳转到根目录

登录时跳转都正常,退出时就会自动跳转到根目录,看了好几天没有找到问题原因在哪儿,遇到这种问题我们通常应该怎么去分析? ![image.png](https://static.studygolang.com/180430/f80c3b30f9eefb723461fbc58fa05ffc.png) ![image.png](https://static.studygolang.com/180430/8208f51879a7816be5070acb9557f5d9.png) ...阅读全文

Golang学习之基本数据类型

Golang常见数据类型 如上图所示,Golang中的数据类型分为基本数据类型与复杂数据类型(派生数据类型),这一章重点介绍Golang中的基本数据类型。基本数据类型之整型顾名思义,整型能存放的就是整数值,如0,100,-454等整型细分为两种类型,有符号整型与无符号整型 有符号整型取值范围 无符号整型取值范围 其他整数类型 整数类型中,int uint的大小与使用者的电脑操作系统位数有关Golang中,如果变量没有显式声明为何种整数类型,则默认为int类型 基本数据类型之浮点型浮点型就是用于存放小数类型的数据类型,如0.2,3.14,-9.87等 浮点数类型的分类 Golang中,如果没有显式声明浮点数类型,则默认为float64 浮点数有两种表示方式,一是十进制表示方式,二是科学计数法表...阅读全文

博文 2019-03-26 13:34:42 又绿江南岸1990

Golang基础之格式化输出符号详解

fmt包的格式化输出输入 格式 含义 %% 一个%字面量 %b 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 %c 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 %d 一个十进制数值(基数为10) %e 以科学记数法e表示的浮点数或者复数值 %E 以科学记数法E表示的浮点数或者复数值 %f 以标准记数法表示的浮点数或者复数值 %g 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 %G 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 %o 一个以八进制表示的数字(基数为8) %p 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 %q 使用Go语法以及必须时使用转义,...阅读全文

博文 2019-06-29 01:32:40 Holechain

golang变量类型

golang的变量类型分为两类:基本数据类型 、 派生数据类型 一、基本数据类型包括布尔类型、字符串型、数字类型(整型(有符号整型[int8, int16,int32(rune是int32别名),int64]、无符号整型[uint8(byte是int8别名), uint18, uint32,uint64])、浮点数[float32, float64, complex64,complex128]) tips: Go 有众所周知的类型如 int,这个类型根据你的硬件决定适当的长度。意味着在 32 位 硬件上,是 32 位的;在 64 位硬件上是 64 位的。注意: int 是 32 或 64 位之一,不会 定义成其他值。 uint 情况相同。这些类型全部都是独立的,并且混合用这些类型向变量赋值会...阅读全文

博文 2019-12-26 08:32:46 程序小白菜

golang 中的汇编

简单的源码 package main func main(){ } 生成汇编的代码 go tool compile -S -l test.go -S 是打印汇编 -l 是防止内联 生成的汇编 "".main STEXT nosplit size=1 args=0x0 locals=0x0 0x0000 00000 (test.go:3) TEXT "".main(SB), NOSPLIT, $0-0 # "".main(SB) 函数名称 (SB -> static base) # NOSPLIT 无需提供参数大小 # $0-0 (局部变量的大小字节数) - (传入参数 + 返回值所占的字节数) 0x0000 00000 (test.go:3) FUNCDATA $0, gclocals·33...阅读全文

博文 2019-04-10 23:34:41 个00个

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-06 09:12:06 SunPengWei

go - io Read / ReadAtLeast / ReadFull / EOF / ErrUnexpectedEOF

go 的 io包提供了ReadFull / ReadAtLeast函数对Reader对象进行读操作,任何实现io.Reader接口的对象都可以使用这两个方法,同时还延伸出io.EOF / io.ErrUnexpectedEOF错误,下面实践一下。 io.Reader Interface & io.Reader.Read Reader对象必须实现了io.Reader接口,此接口约定了Read方法,实现此方法的对象都可以使用go io提供的其他方法进行读操作,比如 ReadAtLeast/ReadFull,io.Reader.Read方法的实现规则如下: // 尝试读取 len(p) 字节的数据 并返回实际读取到的字节数 n 和 err // 当 n > 0 时,err = nil,n <= l...阅读全文

博文 2019-06-14 18:32:39 big_cat

leetcode_1033

Golang: 思路:直接把我的题解搬上来吧 对abc进行排序,假定排完序后abc依次递增 条件1:b-a=c-b=1时,最小移动步数为0 条件2:不满足条件1, 那么看下b-a或者c-b有没有小于等于2的,有,那么最小移动步数为1 条件3:不满足条件1 2,那么最小移动步数为2 最大移动步数: 注意,这里是我不太理解的。我觉得以我对题意的理解,这题最大步数不是这么算的,比如 a=0,b=4,c=14 我可以先将a移动到7的位置,移动次数为7,移动后,位置变成[4,7,14] 再将4移动到10,移动次数为6,移动后,位置变成[7,10,14] 我认为这样的移动是符合题目给的条件的,但我此时就已经移动了13次了,而0 4 14的答案是12 题目想要我们求的最大移动步数,实际上是,max(a,b...阅读全文

博文 2020-02-19 15:32:48 淳属虚构

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-07-01 17:00:01 u012855229

DjanFey的基础库解读--io包(pipe.go)

// Pipe适配器是用来连接期望一个io.Reader的代码和期望一个io.Writer的代码 package my_io import ( "errors" "sync" ) // onceError是一个只会存储一次错误的对象 type onceError struct { sync.Mutex //解析见下面 err error } func (a *onceError) Store(err error) { a.Lock() defer a.Unlock() if a.err!=nil{ return } a.err=err } func (a *onceError) Load() error { a.Lock() defer a.Unlock() return a.err } /...阅读全文

博文 2020-03-10 11:34:25 DjanFy

Go语言核心之美 2.2-浮点数

Go提供了两种size的浮点数,float32和float64。它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范。 浮点数能够表示的范围可以从很小到很巨大,这个极限值范围可以在math包中获取,math.MaxFloat32表示float32的最大值,大约是3.4e38,math.MaxFloat64大约是1.8e308,两个类型最小的非负值大约是1.4e-45和4.9e-324。 float32大约可以提供小数点后6位的精度,作为对比,float64可以提供小数点后15位的精度。通常情况应该优先选择float64,因此float32的精确度较低,在累积计算时误差扩散很快,而且float32能精确表达的最小正整数并不大,因为浮点数和整数的底层解释方式完全不同,具体见I...阅读全文

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

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

golang 指针类型引起的神奇 bug

下面是使用的结构体接口抽象定义,其实就是将结构体存进一个 map里。由于是读写都比较频繁,我加了读写锁。 // add progress listener. func (upload *UploaderGateway) AddProgress(key string, v ProgressListener) { upload.mutex.Lock() defer upload.mutex.Unlock() upload.ProgressMap[key] = v } //get progress listener. func (upload *UploaderGateway) GetProgress(key string) (v ProgressListener, err error) { up...阅读全文

博文 2019-05-26 03:34:41 kenuo

Golang学习(4)——strings包

Golang学习 - strings 包--------------------strings 包与 bytes 包中的函数用法基本一样,不再赘述。 只对 Replacer 进行说明。// 转换func ToUpper(s string) stringfunc ToLower(s string) stringfunc ToTitle(s string) stringfunc ToUpperSpecial(_case unicode.SpecialCase, s string) stringfunc ToLowerSpecial(_case unicode.SpecialCase, s string) stringfunc ToTitleSpecial(_case unicode.Specia...阅读全文

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

Go语言学习笔记6

4.Go语言数据的使用 4.1赋值语句 如果值 x 可以被赋给类型为 T 的变量,那么它们至少需要满足以下条件中的一个赋值规则: 如果值 x 的类型是 T , 那么 x 可以被赋给 T 类型的变量。 如果值 x 的类型是 V,那么 V 和 T 应该具有相同的潜在类型,并且它们之中至少有一个是未命名的类型。未命名的类型是指未被署名的数据类型。例如,字面量: struct { a int b string }{0,"string"} 所代表的值的类型是 struct { a int b string } 而这个类型就是一个未命名的类型。它的潜在类型与结构体类型 type Anonym struct { a int b string } 相同。因此,上面的字面量可以被赋给类型为 Anonym 的变...阅读全文

博文 2016-08-17 18:00:05 u012855229

Golang包——bytes

byte.Buffer 扩容策略 b.buf = b.buf[:length+need] 新容器的容量 =2* 原有容量 + 所需字节数 内容泄露 内容泄露是指,使用Buffer值的一方通过某种非标准的(或者说非正式的)的方法,得到了本该得不到的内容 性能测试 func BenchmarkStrBuilder(b *testing.B) { str := strings.Builder{} str.WriteString("test") for i := 0; i < b.N; i++ { str.String() } } func BenchmarkByteBuffer(b *testing.B) { byte := bytes.Buffer{} byte.WriteString("tes...阅读全文

博文 2019-04-02 20:34:41 羊羽share

seelog源码阅读【笔记】

最近被后台日志弄的很烦,看到有个项目简简单单,又能满足需要,顺便试下看看效果,做下记录。只是记录下一部分内容,就不全部读了,关于源码可以去https://github.com/xmge/seelog。 结构设计 // websocket客户端 type client struct { id string socket *websocket.Conn send chan []byte } // 客户端管理 type clientManager struct { clients map[*client]bool broadcast chan []byte register chan *client unregister chan *client } WebSocket 是 HTML5 开始提供的...阅读全文

从零学习 Go 语言(04):byte、rune与字符串

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

博文 2020-03-25 21:49:10 hello_wbm

Golang io reader writer

一、《GO语言实战》P194 类 UNIX 的操作系统如此伟大的一个原因是,一个程序的输出可以是另一个程序的输入这一理念。依照这个哲学,这类操作系统创建了一系列的简单程序,每个程序只做一件事,并把这件事做得非常好。之后,将这些程序组合在一起,可以创建一些脚本做一些很惊艳的事情。这些程序使用 stdin 和 stdout 设备作为通道,在进程之间传递数据。 同样的理念扩展到了标准库的 io 包,而且提供的功能很神奇。这个包可以以流的方式高效处理数据,而不用考虑数据是什么,数据来自哪里,以及数据要发送到哪里的问题。与 stdout和 stdin 对应,这个包含有 io.Writer 和 io.Reader 两个接口。所有实现了这两个接口的类型的值,都可以使用 io 包提供的所有功能,也可以用于其...阅读全文

博文 2019-03-12 20:34:42 懒皮

深入理解 golang 切片机制(理)

文 切片总是要有一个交代的,来看看这段代码code package main import ( "fmt" "unsafe" ) type Slice struct { ptr unsafe.Pointer // Array pointer len int // slice length cap int // slice capacity } // 因为需要指针计算,所以需要获取int的长度 // 32位 int length = 4 // 64位 int length = 8 var intLen = int(unsafe.Sizeof(int(0))) func main() { s := make([]int, 10, 20) // 利用指针读取 slice memory 的数据 if...阅读全文

博文 2017-09-30 13:34:59 离开舒适区_34b0

golang的scan标准库(fmt.scan的使用)

载自https://www.cnblogs.com/golove/p/5888441.html标准库 - fmt/scan.go 解读 // Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // go/src/fmt/scan.go // version 1.7 // 格式化输入输出的用法请参考:http://www.cnblogs.com/golove/p/3284304.html package fmt import ( "er...阅读全文

博文 2018-10-08 17:35:50 ck_god

GO、python中的循环事项对比。

GO语言中,有三种,可以看到在GO中浮点数可以作为循环变量的。 func main() { i := 10 for { i += 1 if i > 18 { break } } for i := 0.1; i <= 10; i += 0.2 { fmt.Println(i) } for i := 10; i >= 0; i-- { fmt.Println(i) } fmt.Println("over") } 而python中,只能自定义一个函数作为浮点数的变量递增。 for i in range (10): print(i) for i in range(1,10,2): print(i) def progression(start, length,step): for i in range...阅读全文

博文 2017-03-15 07:00:40 大洋的顶端

Go语言之三驾马车

Go是一门面向接口编程的语言,interface的设计自然是重中之重。Go中对于interface设计的巧妙之处就在于空的interface可以被当作“Duck”类型使用,它使得Go这样的静态语言拥有了一定的动态性,却又不损失静态语言在类型安全方面拥有的编译时检查的优势。 从底层实现来看,interface实际上是一个结构体,包含两个成员。其中一个成员指针指向了包含类型信息的区域,可以理解为虚表指针,而另一个则指向具体数据,也就是该interface实际引用的数据...阅读全文

博文 2017-10-28 06:37:02 腾讯WeTest

[转载]如何计算服务器能够承受多大的pv?

你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢? PV是什么: PV是page view的简写。PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv。 计算模型: 每台服务器每秒处理请求的数量=((80%总PV量)/(24小时60分60秒40%)) / 服务器数量 。 其中关键的参数是80%、40%。表示一天中有80%的请求发生在一天的40%的时间内。24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用,白天请求多,晚上请求少)。 简单计算的结果: ((80%500万)/(24小时60分60秒40%))/1 = 115.7个请求/秒 ((80%100万)/(24小时60分60...阅读全文

博文 2018-12-31 19:34:47 Golang语言社区

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-02 15:00:05 u012855229

golang中的bytes包

golang标准库中提供了bytes包,该包几乎和strings包给string提供的功能,只不过bytes包对应的是[]byte。和strings一样,并不修改传入变量,而是返回其副本修改之后的内容。 整个包分为以下几种操作:转换、比较、去除、分割、查找、替换 一、转换 将s的副本中所有字符修改成大写(小写),然后返回 func ToUpper(s []byte) []byte // 全部转大写 func ToLower(s []byte) []byte // 全部转小写 func ToTitle(s []byte) []byte // 全部转大写 使用指定的映射表将对s的副本中的所有字符进行修改,然后返回 func ToUpperSpecial(_case unicode.Special...阅读全文

博文 2018-12-02 21:34:53 laijh

Golang strconv包使用

开发十年,就只剩下这套Java开发体系了 >>> // atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str string) (value bool, err error) func main() { fmt.Println(strconv.ParseBool("1")) // true fmt.Println(strconv.ParseBool(...阅读全文

博文 2018-09-23 00:33:08 路人甲777

Golang解析android 备份文件

我参考了一个stackoverflow上的一个项目,java解android备份文件。然后译成了golang代码。总结:java语言本身虽然很老,但是人家库多啊,但是人家的流还真是好用想念java的第x天。 整体的备份文件:xx.ab 分为两部分 不加密部分 加密部分 分析 加密部分 我所解析的一个文件信息 magic string version int compress int encryptionAlg string userSaltHex string ckSaltHex string round int userIvHex string masterKeyBlobHex string 一些debug信息,方便了解上述具体内容···agic: ANDROID BACKUPVersio...阅读全文

博文 2017-04-19 08:52:34 送你一碗大麦茶

go - bufio 缓冲读写详解级实例

go在提供了io包的同时也提供了bufio包来实现有缓存的读写操作以提高读写性能。为什么bufio性能比io高呢? 缓冲读写 缓冲读 // 默认缓冲区大小 const ( defaultBufSize = 4096 ) // 最小缓冲区大小 自定义小于次阈值将会被覆盖 const minReadBufferSize = 16 // 使用默认缓冲区大小 bufio.NewReader(rd io.Reader) // 使用自定义缓冲区大小 bufio.NewReaderSize(rd io.Reader, size int) 缓冲读的大致过程如下,设定好缓冲区大小buf_size后,读取的字节数为rn,缓冲的字节数为bn: 如果缓冲区为空,且 rn >= buf_size,则直接从文件读取,不...阅读全文

博文 2019-06-15 17:32:39 big_cat

30. Readers读取数据流

go语言的 io 包指定了 io.Reader 接口。go语言标准库包含了这个接口的许多实现,包括文件、网络连接、压缩、加密等等。 io.Reader 接口有一个 Read 方法: func (T) Read(b []byte) (n int, err error) 在程序中,我们使用循环读取数据流,直到 error 返回 io.EOF 。 我们建立一个每次以 8 个字节读取 strings.Reader 的输出的程序示例。 package main import( "fmt" "strings" "io" ) func main() { r := strings.NewReader("Hello, Reader!") b := make([]byte, 8) // 8 这里控制每次读取的字...阅读全文

博文 2017-08-20 02:05:02 厚土火焰山