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

Go语言小贴士1 - io包

Go语言作为定位服务端编程的语言,处理文件和网络通讯是它主要的应用场景,不论是处理文件还是处理网络通讯,它们都被称之为IO编程,即-对计算机的输入输出设备进行编程。 Go的运行时有一个名叫io的包,从命名可想而知它在Go语言的实际应用中有多么重要的地位,Go语言的所有IO编程都绕不过这一个包。 所以正确的理解这个包,在Go语言的工程实践中是非常重要的,不论你是准备用Go语言处理文件还是处理网络通讯,请务必先看这个包。 io包中大部分是接口定义,其中io.Reader和io.Writer最为关键。在Go语言中,文件、套接字等一切输入设备抽象,都会实现io.Reader接口,而一切输出设备抽象,都会实现io.Writer接口。 io.Reader的定义如下: type Reader interf...阅读全文

博文 2017-02-10 16:35:19 达达

TCP连接的状态变迁

全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

go-events package简介

go-events实现了一种处理event的机制,其核心概念是Sink(定义在event.go): // Event marks items that can be sent as events. type Event interface{} // Sink accepts and sends events. type Sink interface { // Write an event to the Sink. If no error is returned, the caller will // assume that all events have been committed to the sink. If an error is // received, the caller ma...阅读全文

博文 2017-06-25 14:10:32 肖楠

开源API测试工具 Hitchhiker v0.5更新 - 完善细节

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起管理Api。 详细介绍请看: http://doc.hitchhiker-api.com/cn/introduction.html 在线体验: http://www.hitchhiker-api.com/, 可以用 try without login 来免登录使用 (在线演示不支持压力测试和上传js,虚拟机单核的,撑不住)。 下面来看看这次的更新: request和setRequest Script 增加属性request来得到请求的信息,包括 method, url, headers, body。 c...阅读全文

博文 2017-11-30 00:04:39 布鲁克石

Go语言字符串浅析

在Go语言中,字符串就是一个只读(read-only)的,可以包含任意字节(byte)的切片(slice)。由于Go源码文件都是使用UTF-8编码的,所以直接在源码中输入的字符串也都是用UTF-8编码的(前提是字符串里没有byte-level escapes,即字节层面上的转义)。请看下面这个例子: package main import "fmt" func main() { s := "日志log" fmt.Println(len(s)) } 执行结果: 9 s是一个UTF-8编码的字符串,“日志”两个汉字各占3个字节,所以一共是9个字节。 再看一个例子: package main import "fmt" func main() { s:="\xFF\xFF" fmt.Println(...阅读全文

博文 2017-06-24 19:16:27 肖楠

[系列] - go-gin-api 路由中间件 - 捕获异常(四)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。当系统发生异常时,提示 “系统异常,请联系管理员!”,同时并发送 panic 告警邮件。 什么是异常? 在 Go 中异常就是 panic,它是在程序运行的时候抛出的,当 panic 抛出之后,如果在程序里没有添加任何保护措施的话,控制台就会在打印出 panic 的详细情况,然后终止运行。 我们可以将 panic 分为两种: 一种是有意抛出的,比如, panic("自定义的 panic 信息") 输出: 2019/09/10 20:25:27 http: panic serving [::1]:61547: 自定义的 panic 信息 goroutine 8 [running]: ...阅读全文

博文 2019-09-11 13:02:39 新亮

Go语言小贴士2 - 协议解析

今天这个小贴士主要介绍协议解析的一些知识,Go语言作为服务端编程语言,免不了要涉及到通讯协议解析,即便不是做网络通讯,也难免会涉及到文件解析,其实它们的知识点都是一样的。 现实应用场景中,通讯协议按通常可以分为两类:二进制协议和文本协议。Go语言内置的gob格式就是一种二进制协议,而JSON、XML等则是文本协议。 假设我们要发送123这个数值,用二进制协议只需要一个字节,因为一个字节(byte)有8个二进制位(bit),2的8次方是256,一个字节可以表达0-255之间的任意值,共256种可能性。 如果我们用文本协议发送123这个数值,则需要至少三个字节,因为123这个数字需要转换成字符'1'、'2'、'3'这三个ASCII字符,存入三个字节中。 所以同样一个数据,用二进制协议表达的体积通...阅读全文

博文 2017-02-10 16:35:27 达达

Golang实现统计文件内容的字符,数字,符号数量

废话不多说,直入主题 今天学习了通过Golang语言实现了统计文件内容中的字符,空格,数字,符号的数量, 当然也可以用来统计更多,例如:统计汉字,大写/小写字母等...仅需要更改部分代码即可. 知识点总结 代码实现前的思路分析: 打开一个文件,创建一个reader 每读取一行,就去统计该行有多少个字符,数字,空格等数量 然后将统计的数量储存到一个结构体内 引入的包有:bufio, io,os,fmt 源代码参考 package main import ( "bufio" "fmt" "io" "os" ) /* 代码编写思路: 1- 打开一个文件,创建一个reader 2- 每读取一行,就去统计该行有多少个字符,数字,空格等数量 3 - 然后将结果存到一个结构体内 */ // 定义一个结构体...阅读全文

博文 2019-10-13 00:32:52 aside section ._1OhGeD

【Go】高效截取字符串的一些思考

文链接:https://blog.thinkeridea.com/... 最近我在 Go Forum 中发现了 String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高效截取字符串的方法,这篇文章将逐步讲解我实践的过程。 字节切片截取 这正是 “hollowaykeanho” 给出的第一个方案,我想也是很多人想到的第一个方案,利用 go 的内置切片语法截取字符串: s := "abcdef" fmt.Println(s[1:4]) 我们很快就了解到这是按字节截取,在处理 ASCII 单字节字符串截取,没有什么比这更完美的方案了,中文往往占多个字节,在 utf8...阅读全文

博文 2019-10-31 09:02:38 thinkeridea

golang mail 实现ssl发送邮件

由于我们使用的阿里云服务器不能telnet 25端口,发送ssl时候感觉很蹩脚,就自己写了一个go mail 发送1、文档结构2、main.go// main.go package main import ( "flag" "fmt" "io/ioutil" "log" "net/smtp" "os" "sslmail/mymail" "strings" ) func SendMail(fromuser, password, subject, host, port, bodyfile, bodyhtmlfile string, tousers, attachs []string) error { // NewEmail返回一个email结构体的指针 e := mymail.NewEmail(...阅读全文

博文 2019-12-14 00:33:43 xingzhehxiang

[系列] - go-gin-api 路由中间件 - 捕获异常(四)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。当系统发生异常时,提示 “系统异常,请联系管理员!”,同时并发送 panic 告警邮件。 什么是异常? 在 Go 中异常就是 panic,它是在程序运行的时候抛出的,当 panic 抛出之后,如果在程序里没有添加任何保护措施的话,控制台就会在打印出 panic 的详细情况,然后终止运行。 我们可以将 panic 分为两种: 一种是有意抛出的,比如, panic("自定义的 panic 信息") 复制代码输出: 2019/09/10 20:25:27 http: panic serving [::1]:61547: 自定义的 panic 信息 goroutine 8 [runnin...阅读全文

博文 2019-09-11 13:04:20 訢亮

汇总文件的相关操作

**我们在进行文件的相关操作时,往往不明白在哪种情况下使用那些函数,每次查百度导致开发效率低下,我这里列举一些方便以后查询:** * **读取整个文件** * **从文件的某个位置开始,进行读、写n个字符操作** * **拷贝文件到另一个文件,或拷贝文件的前面n个字符到另一个文件** * **将多个文件汇聚到一个文件来进行操作** * **将多个字符同时写到多个文件中** * **获取文件的相关信息(名称、大小、是否为文件夹、文件权限、创建、最后访问、最后修改时间、绝对路径、重命名操作、是否存在)** * **获取文件夹的所有文件** * **将一个文件的内容写入到另一个文件中,可控制写入内容** **1、读取整个文件** ```go func test1() { f, err := os....阅读全文

博文 2018-07-31 15:23:01 embiid

Rabin-Karp算法在go的实现

文链接 github 简介 Rabin-Karp字符串快速查找算法和FNV hash算法是golang中strings包中字符串查所用到的具体算法,算法的核心就在于循环hash,而 FNV hash则是散列方法的具体算法实现。 算法思想 Rabin-Karp算法思想: 假设待匹配字符串长度M,目标字符串长度N(N>M) 首先计算待匹配字符串hash,计算目标字符串前M个字符hash 比较前两个hash值,比较次数N-M+1 若hash不相等,继续计算目标字符串下一个长度为M的hash并继续循环比较 若hash相等则再次判断字符串是否相等已确保正确性 FNV hash: 将字符串看作是字符串长度的整数,这个数的进制是一个质数。计算出来结果之后,按照哈希的范围求余数得到结果。 其中不同机制对应质...阅读全文

博文 2019-10-01 22:34:24 打瞌睡滴花花

ECS控制台实例搜索的优化与改进

摘要: 搜索功能是控制台非常重要的功能,承载着实例管理入口的作用,应该好用,快速和准确。然而,ECS控制台实例列表的搜索功能经常被吐槽不好用,痛点主要有以下三点: 每次搜索之前需要选择搜索类型,非常繁琐。 过滤条件太多了, 搜索框,tag,表格过滤,高级搜索,搜索条件不统一 不支持模糊搜索 从已知的这些问题出发,ECS控制台将对搜索功能,以及整个实例管理的用户体验部分做长期的优化和改进。 搜索功能是控制台非常重要的功能,承载着实例管理入口的作用,应该好用,快速和准确。然而,ECS控制台实例列表的搜索功能经常被吐槽不好用,痛点主要有以下三点: 1.每次搜索之前需要选择搜索类型,非常繁琐。 2.过滤条件太多了, 搜索框,tag,表格过滤,高级搜索,搜索条件不统一 3.不支持模糊搜...阅读全文

Golang里的AES、DES、3DES加解密,支持ECB、CBC等多种模式组合,兼容JAVA、PHP等语言

Openssl encryption:OpenSSL库的功能包装,用于对称和非对称加密和解密。 AES-ECB AES-CBC DES-ECB DES-CBC 3DES-ECB 3DES-CBC 安装 go get -u github.com/thinkoner/openssl 用法 AES 密钥的长度可以是16/24/32个字符(128/192/256位)。 AES-ECB: src := []byte("123456") key := []byte("1234567890123456") dst , _ := openssl.AesECBEncrypt(src, key, openssl.PKCS7_PADDING) fmt.Printf(base64.StdEncoding.Encod...阅读全文

博文 2019-10-15 10:32:57 李否否

Go Web编程--使用bcrpyt哈希用户密码

上一期的文章《我们应该如何保护用户的密码》里我们介绍了bcrypt相较于MD5,SHA-1...SHA-256等哈希算法更适合用于做密码的哈希,原因就是bcrypt算法哈希字符串的速度远远慢于上面列举的那些算法。这样即使整个用户密码库被用户盗用后想要通过彩虹表和暴力破解的方法猜测出用户的密码代价会非常高昂。今天的文章里就主要来看一下bcrypt哈希的组成部分以及在Go语言里如何使用bcrypt对密码字符串进行哈希。 bcrypt哈希字符串的组成 bcrypt哈希由多个部分组成。这些部分用于确定创建哈希的设置,从而可以在不需要任何其他信息的情况下对其进行验证。 上图是一个bcrypt哈希的示例图,其由四部分组成: Prefix说明了使用的bcrypt的版本 Cost是进行哈希的次数-数字越大生...阅读全文

博文 2020-04-13 11:32:44 Kevin

golang 基础(19)字符串

square-gopher.png 字符和字符串处理 func main(){ s := "Yes我爱Go!" fmt.Printf("%s\n",[]byte(s)) } 这样打印出是就是 "Yes我爱Go!"、打印一下(fmt.Println(len(s)))输出 s 长度为 12 。那么这个 12 是怎么来的呢。 fmt.Printf("%X\n",[]byte(s)) 可以打印出里面具体字节的数字,会使用 %X 来打印字节 596573E68891E788B1476F21 这样并不便于观察,我们可以通过 for 循环来讲字符一个一个打印出来 for _, b := range []byte(s){ fmt.Printf("%X ",b) } fmt.Println() 59 65 7...阅读全文

golang-101-hacks(10)——String

注:本文是对golang-101-hacks中文翻译。 在Go中string是由不可变的字节数组构成的。一旦赋值,就不能修改字符串的值。例如 In Go, string is an immutable array of bytes. So if created, we can't change its value. E.g.: package main func main() { s := "Hello" s[0] = 'h' } 编译结果会提示错误: The compiler will complain: cannot assign to s[0] 对字符串的修改可以将其转换为“byte”数组。但是实际上您并没有对原始字符串进行修改操作,改变的只是一个原始字符串的副本。 To modify...阅读全文

博文 2019-05-30 23:34:40 羊羽share

前端遇上Go: 静态资源增量更新的新实践

来源:美团点评技术团队 链接:https://tech.meituan.com/2018/07/05/fe-and-golang.html 为什么要做增量更新 美团金融的业务在过去的一段时间里发展非常快速。在业务增长的同时,我们也注意到,很多用户的支付环境,其实是在弱网环境中的。 大家知道,前端能够服务用户的前提是 JavaScript 和 CSS 等静态资源能够正确加载。如果网络环境恶劣,那么我们的静态资源尺寸越大,用户下载失败的概率就越高。 根据我们的数据统计,我们的业务中有2%的用户流失与资源加载有关。因此每次更新的代价越小、加载成功率越高,用户流失率也就会越低,从而就能够变相提高订单的转化率。 作为一个发版频繁的业务,要降低发版的影响,可以做两方面优化: 更高效地使用缓存,减少静态资...阅读全文

博文 2020-04-25 01:32:52 夜空_b36c

Python之上下文管理器

1.引入 我们时常会看到网上很多人写文件读写的代码的时候,常常是这么写的: with open('test.txt', 'r') as f: print(f.read()) # 其它操作 这个with有什么用呢? 我们来看看不用这种写法我们怎么写。 假如我们直接这么写: f = open('test.txt', 'r') print(f.read()) # 其它操作 f.close() 这种写法有什么问题呢? 假如在做其它操作的时候,出错了,程序终止,f.close()不会执行,则f这个句柄会一直得不到释放,要是并发操作,这个就很严重了。 所以我们通常会这么写: try: f = open('test.txt', 'r') except Exception: pass finally: f....阅读全文

博文 2019-10-11 18:32:50 aside section ._1OhGeD

【Golang语言】LeetCode 1002. Find Common Characters

Given an array A of strings made only from lowercase letters, return a list of all characters that show up in all strings within the list (including duplicates). For example, if a character occurs 3 times in all strings but not 4 times, you need to include that character three times in the final answer. 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字...阅读全文

博文 2019-08-25 00:33:27 努力的C

Go语言笔记 | 06-基本类型

布尔类型 bool 布尔类型的值只能是常量 true 或者 false。 var b bool = true var c = false 布尔类型和数字 0,1 不能直接转换,必须通过编程实现,if 和 for 语句的条件部分都是布尔类型。 // btoi returns 1 if b is true and 0 if false. func btoi(b bool) int { if b { return 1 } return 0 } 整数类型 golang 提供了多种大小的整数类型,也区分了有符号数和无符号数。 几种确定范围的整数类型: uint8 8-bit 0 to 255 uint16 16-bit 0 to 65535 uint32 32-bit 0 to 4294967295 ...阅读全文

博文 2019-03-01 12:34:42 jianggushi