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

老虞学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

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 大洋的顶端

[转载]如何计算服务器能够承受多大的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 厚土火焰山

【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:Goroutine, OS线程 以及 CPU管理

文https://medium.com/a-journey-with-go/go-goroutine-os-thread-and-cpu-management-2f5a5eaf518a 操作系统的线程创建以及切换是需要开销的,会影响程序的性能。Go致力于尽可能地从内核中获取优势,所以从最开始的时候设计就考虑到了并发性。 M,P,G 编排 为了解决这个问题,Go有他自己的调度者,负责在线程上分配goroutines。这个协调者由3个概念组成,如下: The main concepts are: G - goroutine. M - worker thread, or machine. 工作线程或机器 P - processor, a resource that is required to e...阅读全文

博文 2019-11-27 16:04:19 野生程序元

从零学习 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