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

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

Golang简单写文件操作的四种方法

package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) func check(e error){ if e != nil { panic(e) } } // 判断文件是否存在,存在返回 true 不存在 false func checkFileIsExist(filename string) bool { var exist = true if _, err := os.Stat(filename);os.IsNotExist(err){ exist = false } return exist } func main(){ var wireteString = "测试" var filename = "./output1.tx...阅读全文

博文 2019-11-18 13:32:50

golang 结构体字节对齐的问题!疑惑

![捕获1.JPG](https://static.studygolang.com/190822/b22fda8ed511728df822d76c9a31715b.JPG) ![捕获2.JPG](https://static.studygolang.com/190822/cc4566dcf55765ce5f8dee1e0441c7d6.JPG) 上面那个列子和我想的一样 按照对齐的规则计算的 type class struct { //32 fff byte //1 className string //16 } func main(){ c:=class{ className:"111", fff:1, } fmt.Println(unsafe.Sizeof(c.className)) f...阅读全文

博文 2019-08-22 15:58:05 blackdinosuar

深入理解 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 1.9 新特性预览:Logging, interfaces, and allocation

该文翻译自:http://commaok.xyz/post/interface-allocs/几个星期前,Peter Bourgon在golang-dev开了一个关于标准化日志记录的帖子。 日志很常用,因此性能很快提升。 go-kit日志包使用结构化日志,接口如下:typeLoggerinterface {Log(keyvals ...interface{}) error}调用代码:logger.Log("transport","HTTP","addr", addr,"msg","listening")请注意,进入日志调用的所有内容都将转换为interface{}。 这意味着它分配了不少内存。与另一个结构化日志库zap进行比较。 Zap为了避免内存分配和interface{}使用,导致了更丑...阅读全文

Go语言字节序列、数字与字符串及其之间的互相转换

#Go语言字节序列、数字与字符串及其之间的互相转换 int int64 uint uint64 float64 string []byte之间的转换 --- ## 1 strconv包 实现了字符串和基本数据类型之间的转换。 ### 1.1 int和string转换 ``` i, err := strconv.Atoi("-42") //string->int s := strconv.Itoa(-82) //int->string fmt.Println("int<-->string:", i, err, s) -------------------------------------- int<-->string: -42 -82 ``` ### 1.2 字符串转为数字 ``...阅读全文

博文 2018-11-24 19:32:39 weiwg521

golang中crypto/aes包

aes是对称加密算法,这篇博客只介绍怎么使用golang中怎么调用标准库已封装的算法实现,如果是要学习aes算法实现,移步百度 有两个操作:加密和解密 const BlockSize = 16 功能说明:AES算法块(加密数据块)的字节长度。 package main import ( "bytes" "crypto/aes" "crypto/cipher" "log" "fmt" ) // 填充数据 func padding(src []byte, blockSize int) []byte { padNum := blockSize - len(src) % blockSize pad := bytes.Repeat([]byte{byte(padNum)}, padNum) retur...阅读全文

详解varint编码原理

什么是Varint编码 Varint是一种使用一个或多个字节序列化整数的方法,会把整数编码为变长字节。对于32位整型数据经过Varint编码后需要1~5个字节,小的数字使用1个byte,大的数字使用5个bytes。64位整型数据编码后占用1~10个字节。在实际场景中小数字的使用率远远多于大数字,因此通过Varint编码对于大部分场景都可以起到很好的压缩效果。 编码原理 除了最后一个字节外,varint编码中的每个字节都设置了最高有效位(most significant bit - msb)–msb为1则表明后面的字节还是属于当前数据的,如果是0那么这是当前数据的最后一个字节数据。每个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效组在前,或者叫最低有效字节在前。这表明varin...阅读全文

博文 2019-09-26 13:02:38 KevinYan

Go语言类型转换

摘自快乐编程 » golang类型转换 golang是强类型语言,在应用过程中类型转换基本都会用到。下面整理一下常用的类型转换,会持续更新。 整形转字符串 fmt.Println(strconv.Itoa(100)) 该方法的源码是: // Itoa is shorthand for FormatInt(i, 10).func Itoa(i int) string { return FormatInt(int64(i), 10)} 可以看出是FormatInt方法的简单实现。 字符串转整形 i, _ := strconv.Atoi("100")fmt.Println(i) 64位整形转字符串 var i int64i = 0x100fmt.Println(strconv.FormatInt(...阅读全文

博文 2017-07-20 04:00:01 luckybookmarks

golang 数据类型之间的转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34322082/article/details/81106091 一、基本数据类型之间的转换 1、string到int int,err:=strconv.Atoi(string) 2、string到int64 int64, err := strconv.ParseInt(string, 10, 64) 3、int到string string:=strconv.Itoa(int) 4、int64到string string:=strconv.FormatInt(int64,10) 5、字符串到float32/float64 float32, err = ParseFloat(stri...阅读全文

博文 2019-04-22 18:31:38 sinat_34322082

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

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

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

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 送你一碗大麦茶

golang语言渐入佳境[21]-string类型详解

string的本质string是一个引用类型,string包含了两个部分。一个部分是指针,指向了底层的一个字节数组。另一个部分是字节数组的长度。当复制字符串时,也只是复制了指针与长度。底层的那个字节数组是不能够改变的。字符串使用UTF-8编码。打印字符串12345func main(){ str := "跟着建勋老师学编程" fmt.Println([]byte(str)) // 转换为字节数组}转换为字节数组1234func main(){ str := "跟着建勋老师学编程" fmt.Println([]byte(str))}字符串中特殊字符12345678910\a U+0007 alert or bell\b U+0008 backspace\f U+000C form feed\n...阅读全文

博文 2018-12-06 03:35:15 jonson_jackson

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 厚土火焰山

【转】go语言的字节序

文:http://lihaoquan.me/2016/11/5/golang-byteorder.html 这个人的博客写的不错,品质也比较高。 我应该也要有这种精神,这种态度。深入到计算机的世界中去。也是一种快乐。 使用Go开发一个简单反向代理服务 这篇文章也要研究一下。很好 --------------------------------------------------------------------------------------------- go语言的字节序 go 最近在看nsq的源码时候,发现它处理message的时候,都会采用字节序进行数据包的处理,于是我觉得有必要深入了解下TCP协议中 字节序的知识 字节序(Byte Order) 我们一般把字节(byte)看作是...阅读全文

博文 2018-07-26 00:30:00 oxspirt

golang练习:Reader

实现一个 Reader 类型,它产生一个 ASCII 字符 'A' 的无限流。 题目理解:无限流的意思就是 返回值中 error不会存在 EOF的情况,并且会填充一个A因为A只有一个字节,所以int返回的是1 package main import "golang.org/x/tour/reader" type MyReader struct{} // TODO: 给 MyReader 添加一个 Read([]byte) (int, error) 方法 func (m MyReader) Read(b []byte) (int, error) { b[0] = "A" return 1 nil } func main() { reader.Validate(MyReader{}) ...阅读全文

博文 2019-12-30 02:32:38 该用户太帅没有设置昵称

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

golang中encoding/base64包

go标准库中的base32包与base64包的提供的方法以及使用几乎一至,不同的地方就是就是底层实现,一个是进行base32编解码操作,另一个是进行base64编解码操作。如果是已经知道go base32包的使用的话,可以不用看下面的内容,或者是简单的过一遍。 1、golang中的base64包中有什么内容? 2、base64给我们开发者提供了什么?以及用法? 3、编码与解码各有哪几种操作? 一、golang中的base64包中有什么内容? 这个包实现了RFC 4648 里定义的 base64 编码。封装了base64的编解码操作。 二、base64给我们开发者提供了什么?以及用法? 变量 RFC 4648 里定义的标准 base64 编码方法 var StdEncoding = NewEn...阅读全文

博文 2018-12-11 20:34:44 laijh

从零学习 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调用c结构体时的字节对齐问题

c结构体按1字节对齐时, 结构体Fc_tgs_struct与Fc_tgs_struct_2的大小不一致,谁能解答一下 --------------------------------struct.h-------------------------------- #ifndef HEAD_STRUCT_C #define HEAD_STRUCT_C #include #define BYTE_PACK_ON #ifdef BYTE_PACK_ON #pragma pack(1) #endif struct Fc_tgs_struct { char cFlag; unsigned in...阅读全文

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 云栖技术

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 学生黄哲

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

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个

Golang io reader writer

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

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

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 霍帅兵

TODO:字节的那点事Go篇

TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64)在Golang中string底层是由byte数组组成的。fmt.Println(len(“dsd好”))输出的长度是6fmt.Println(len(string(rune(‘好’))))输出的长度是3fmt.Println(len([]rune(“好的2s”)))输出的长度是4所以用string存储unicode的话,如果有中文(中文是由3个字节组成),按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下标访问。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称...阅读全文

博文 2017-02-10 15:50:56 OneTODO

golang[46]-区块链-比特币真实挖矿过程实现

比特币真实挖矿过程实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149...阅读全文

博文 2018-12-13 23:35:59 jonson_jackson

前期

比如新浪微博发微博的输入框有一个已输入字数的统计,它的规则推测是:汉字和中文标点算 1 个字数,英文和其他符号算 0.5 个字数。不足 1 个字算 1 个。大家可以去微博体验一下计算方式。golang 可以使用正则和 unicode 包的方法判断。以下函数 GetStrLength 返回输入的字符串的字数,每个汉字和中文标点算 1 个字数,英文和其他字符算半个字数,不足 1 个字算 1 个。// GetStrLength 返回输入的字符串的字数,汉字和中文标点算 1 个字数,英文和其他字符 2 个算 1 个字数,不足 1 个算 1个func GetStrLength(str string) float64 {var total float64reg := regexp.MustCompile...阅读全文

博文 2019-01-24 23:34:43 青云老师

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语言基础 写出数据 Writer() os包

版权声明: https://blog.csdn.net/weixin_42100098/article/details/80147933 第一步 首先打开一个文件,如果该文件不存在就创建一个,并且写入权限OpenFile(filename,flag,perm)-->*File,err ***** filename:文件名字 flag,获取file的打开模式: O_RDONLY 只读 O_WRONLY 只写 O_RDWR 可读可写 O_CREATE 创建文件 perm,如果文件不存在,需要指定创建的文件的权限 0777(可读可写) -rw-第二步 数据写出 Write([]byte)-->count,err,写出字节数组 WriteAt([]byte,off),在指定位置写出数据。 Write...阅读全文

博文 2019-04-26 23:32:39 weixin_42100098

Golang 实现访问Easyswoole的rpc服务

package main import ( "encoding/binary" "net" ) func main() { var tcpAddr *net.TCPAddr tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9600") conn,_ := net.DialTCP("tcp",nil,tcpAddr) defer conn.Close() sendEasyswooleMsg(conn) } func sendEasyswooleMsg(conn *net.TCPConn) { var sendData []byte data := `{"command":1,"request":{"serviceName":"UserServic...阅读全文

博文 2019-10-08 11:33:39 aside section ._1OhGeD

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 文件操作之二

文件读写 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

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语言四十二章经》第三十一章 文件操作与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

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

[转载]如何计算服务器能够承受多大的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语言社区

2018-08-16-string rune byte 的关系

在Go语言中string 底层是用byte数组存储的,并且是不可以改变的 例如 s:="Go编程" fmt.Println(len(s))输出结果应该是8因为中文字符是用3个字节存的。 len(string(rune('编')))的结果是3 如果想要获得我们想要的情况的话,需要先转换为rune切片再使用内置的len函数fmt.Println(len([]rune(s)))结果就是4了。 所以用string存储unicode的话,如果有中文,按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下表访问。 rune在golang 中是int32 的别名,被用来区分字符值和整数值。通过上述例子可以将rune理解为一个可以表示unicode 编码的值i...阅读全文

博文 2018-08-16 15:34:54 ihujian

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

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

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

【go源码分析】strings.go 里的那些骚操作

go version go1.11 darwin/amd64/src/strings/strings.go strings.go 文件中定义了近40个常用的字符串操作函数(公共函数)。以下是主要的几个函数。 函数 简介 Index(s, substr string) int 返回 substr 在 s 中第一次出现的位置,不存在返回 -1;采用RabinKarp算法 Split(s, sep string) []string 根据 sep 把字符串 s 进行切分,返回切分后的数组 Join(a []string, sep string) string 跟 Split 功能刚好相反 Repeat(s string, count int) string 返回字符串 s 重复 count 次得到的...阅读全文

Go语言之rune

自公众号:“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/Q5RPN0NUmAQzs3o2Tw7HXg本章算是Go语言中的一个小知识点,很简单,了解就好。1. rune类型rune类型是Go语言中的一个基本类型,其实就是一个uint32的别名,主要用于表示一个字符类型大于一个字节小于等于4个字节的情况下,特别是中文字符,定义如下所示:rune is an alias for int32 and is equivalent to int32 in all ways. It is used, by convention, to distinguish character values from integer values.type rune = int32备注:...阅读全文

博文 2020-01-08 10:02:08 ZhDavis

【译】Go语言之父带你重新认识字符串、字节、rune和字符

以下文章翻译自罗伯·派克发表在Go Blog的文章,文章中为读者详述了Go语言中字符串与我们经常提起的字节、字符还有rune的关系和相互之间的不同。正如派克在文中所说 字符串这个话题对于一篇博客文章来说似乎太简单了,但是要很好地使用它们,不仅需要了解它们的工作原理,还需要了解字节,字符和 rune 的区别,以及 Unicode 和 UTF- 8,字符串和字符串直接量之间的区别,以及其他甚至更细微的区别。 原文地址:blog.golang.org/strings 文章篇幅还是挺长的,大家时间都很宝贵所以我先把文章探究的问题的结论放在前面,有时间的同学还是建议整篇读一下。 Go 源代码始终为 UTF-8。 字符串可以包含任意字节。 字符串文字中不包含字节级转义符时字符串始终包含有效的 UTF-8...阅读全文

博文 2020-02-11 22:34:24 kevinyan

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语言对称加密算法

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 unicode/utf8

简介 // Package utf8 implements functions and constants to support text encoded in // UTF-8. It includes functions to translate between runes and UTF-8 byte sequences. package utf8 包utf-8实现的功能和常量用于文章utf8编码,包含runes和utf8字节序列的转换功能.在unicode中,一个中文占两个字节,utf-8中一个中文占三个字节,golang默认的编码是utf-8编码,因此默认一个中文占三个字节,但是golang中的字符串底层实际上是一个byte数组. package main import ( "fm...阅读全文

博文 2019-07-23 17:32:42 第八共同体

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 开始提供的...阅读全文

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