Go语言文件读取的一些总结

Go语言在进行文件操作的时候,可以有多种方法。最常见的比如直接对文件本身进行Read和Write; 除此之外,还可以使用bufio库的流式处理以及分片式处理;如果文件较小,使用ioutil也不失为一种方法。面对这么多的文件处理的方式,那么初学者可能就会有困惑:我到底该用那种?它们之间有什么区别?笔者试着从文件读取来对go语言的几种文件处理方式进行分析。os.File、bufio、ioutil比较效率测试文件的读取效率是所有开发者都会关心的话题,尤其是当文件特别大的时候。为了尽可能的展示这三者对文...阅读全文

Segmentfault 2020-08-25 09:32:33 禹鼎侯

Go多协程并发环境下的错误处理

引言在Go语言中,我们通常会用到panic和recover来抛出错误和捕获错误,这一对操作在单协程环境下我们正常用就好了,并不会踩到什么坑。但是在多协程并发环境下,我们常常会碰到以下两个问题。假设我们现在有2个协程,我们叫它们协程A和B好了:如果协程A发生了panic,协程B是否会因为协程A的panic而挂掉?如果协程A发生了panic,协程B是否能用recover捕获到协程A的panic?答案分别是:会、不能。那么下面我们来一一验证,并给出在具体的业务场景下的最佳实践。问题一如果协程A发生了p...阅读全文

Segmentfault 2020-08-24 16:32:33 NoSay

go语言中大小端模式的个人理解

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串的存储顺序处理。地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。这样的存储模式有利于计算机处理数据。比如对于数据:0x12345678,从高字节到低字节为:12345678,从低字节到高字...阅读全文

51CTO博客 2020-08-19 18:27:38 v824394795

开源一个基于Go语言开发的小巧的http/https网关程序 minGateway

minGateway原本是基于go语言的反向代理功能写的一个小程序,在使用的过程慢慢丰富了一些功能,变成现在一个小巧的网关程序。感觉基本能满足小型网站和APP的需求,在一定程度上替代Nginx,如果有当前未提供需求,在此基础上再做开发也比较方便,所以开源出来,使用中有问题请提Issuse,也欢迎给星星????开源地址:https://github.com/ccynet/minGateway优点:部署简单,程序只有一个单独的文件,支持多个操作系统,即拷即用性能优异,轻松实现每秒上万转发可扩展性好,...阅读全文

Segmentfault 2020-08-24 12:32:32 clxa

使用golang过滤文件名符号

使用golang过滤文件名符号最近客服部遇到个问题:内部跟第三方对接了邮寄文件服务,每次邮寄需要把文件上传,恰好上传文件名不支持特殊符号如“-%&”,手动改太麻烦,于是想到了用go了个小工具 package main import ( "fmt" "io/ioutil" "log" "os" "strings" ) func main() { var yes int fmt.Println("输入1,重命名当前文件夹文件,否则输入2:") fmt.Scanln(&yes) if yes != 1...阅读全文

Segmentfault 2020-08-24 10:32:31 4k显示器电竞鼠标

Go Colly抓取豆瓣电影Top250

百度一下爬虫抓取豆瓣top250,结果竟有70多页。一、起因为何豆瓣Top250如此受欢迎?因为它实在是太适合做爬虫入门练习了。几乎没有任何反爬限制,要抓取的电影相关内容也全部都在源码中(没有异步加载,JS动态修改DOM等情况)。本来计划抓取掘金热门文章来着,但是发现数据基本都是Ajax请求接口获取,所以还是以豆瓣为例吧。二、爬虫因为第一份工作就是Python爬虫,所以对其他语言的爬虫框架也是比较感兴趣的。爬虫说简单也简单,会发出Http请求、了解一些Html基本知识、能够将数据保存下来,就算是...阅读全文

Segmentfault 2020-08-23 18:32:32 lpe234

【golang】因Git密码问题导致的unknown revision v0.0.8

刚接收公司项目时候,go mod拉取gitlab上仓库,总是出现unknown revision问题,没有其他的提示,搜索网上各个博客的解决方法,每一个能解决问题,最后发现是因为go mod里面引入了多个gitlab私有仓库包,每次go get的时候都需要输入用户名与密码,这样会导致前一个用户名和密码框还没输入就被下一个gitlab包顶掉,因为go get 的每次拉取包底层用的git,所以停止掉git pull/push的输入密码设置就可以 解决办法: git config --global c...阅读全文

简书 2020-08-19 10:32:44 dongzaidong

golang爬虫系列1

参考 经历 这里只是获取一个主页的新闻,找到其中的链接,进去读取每页的文章,本来参考文章是存储到数据库,我这边使用mysql,是8版本的mysql,windows下使用异常,在阿里云下面使用没有什么问题,用本地的navcat可以连接处理,但是用golang源码的“github.com/go-sql-driver/mysql”库使用就出现连接异常,不是那个密码格式改了的问题,后面就把对应的内容存储到本地文件,每个链接存储为一篇文章,但是可能有些链接会重复,用了去重处理。 去重代码 func rem...阅读全文

简书 2020-08-19 10:32:44 无拘无束的猪

Gox语言快速入门:一个计算BMI指数的实例-GX3

为了介绍Gox语言的基本用法,本篇将介绍一个用表达式进行日常数学计算的实例,用一个有趣而有用的数学算式来进行。 首先引入体重指数的概念,体重指数(Body Mass Index,简称BMI)是国际上常用于衡量人体胖瘦程度以及是否健康的一个标准,它的公式是 BMI = W ÷ H2,其中BMI是体重指数(严谨地说应该叫身体质量指数,mass是物理上质量的意思)的缩写,W指人的体重(单位是千克),H指人的身高(单位是米)。通过每个人体重指数所处的范围,可以辅助对其进行一定的分类以供统计。本书并不讨论...阅读全文

简书 2020-08-19 10:32:44 陆满庭

为什么go中的receiver name不推荐使用this或者self

前言 在日常的开发中我们除了定义函数以外, 我们还会定义一些方法。这本来没有什么, 但是一些从PHP或者其他面向对象语言转GO的同学往往会把receiver name命名为this, self, me等。 笔者在实际项目开发中也遇到类似的同学, 屡次提醒却没有效果,于是决心写下这篇文章以便好好说服这些同学。 CR标准做法 首先我们来看一下GO推荐的标准命名Receiver Names,以下内容摘抄自https://github.com/golang/go/wiki/CodeReviewComme...阅读全文

简书 2020-08-19 10:32:44 新世界杂货铺

GRPC

首先,GRPC是基于HTTP2来实现的网络传输协议 使用示例 编写IDL(接口描述语言),通过IDL来定义我们的服务,保存为hello.proto syntax = " proto3 " ; package hello ; message HelloRequest{ string name=1; } message HelloResponse{ string reply=1; } service HelloService{ rpc SayHello(HelloRequest) returns(H...阅读全文

简书 2020-08-19 10:32:43 强某某

GO系列 | 00、Go简介

hello,大家好,我是小白,断断续续拖更公众号接近半年了吧,这半年多的时间很忙碌,积攒了很多学到的小知识,也换了个团队,接下来尽量陆陆续续的分享给大家吧~ 坚持不拖更哈。。一、Go背景介绍Go(或 Golang) 是非常年轻的一门语言,起源于 2007 年,并在 2009 年正式对外发布。它的主要目标是“ C/C++ 等编译型语言的性能与安全性和兼具 Python 等动态语言的开发速度”。Go语言是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持,所以用...阅读全文

Segmentfault 2020-08-23 16:32:33 喝醉的清茶

Golang 你一定要懂的连接池

问题引入  作为一名Golang开发者,线上环境遇到过好几次连接数暴增问题(mysql/redis/kafka等)。  纠其原因,Golang作为常驻进程,请求第三方服务或者资源完毕后,需要手动关闭连接,否则连接会一直存在。而很多时候,开发者不一定记得关闭这个连接。  这样是不是很麻烦?于是有了连接池。顾名思义,连接池就是管理连接的;我们从连接池获取连接,请求完毕后再将连接还给连接池;连接池帮我们做了连接的建立、复用以及回收工作。  在设计与实现连接池时,我们通常需要考虑以下几个问题:连接池的连...阅读全文

Segmentfault 2020-08-23 08:32:33 源代码

Go:死锁是如何触发的?

![illustration](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200711-Go-How-Are-Deadlocks-Triggered/illustration.png) 由创作原始 Go Gopher 作品的 Renee French 为“ Go 的旅程”创作的插图。 *本文基于 Go 1.14。* 死锁是当 Goroutine 被阻塞而无法解除阻塞时产生的一种状态。G...阅读全文

Go语言中文网 2020-08-18 17:00:24 alandtsang

Gox语言使用比Go语言增强版的正则表达式-GX49

Gox语言支持Go语言标准库中的正则表达式处理包regexp,可以直接使用,使用上完全和Go语言中相同。另外,通过github.com/topxeq/regexpx包(通过github_topxeq_regexpx引用),还可以支持更复杂的正则表达式功能,如实际应用中有时候非常有用的后向引用、前向断言、后向断言等。 Gox语言1.20版本后内置支持github.com/topxeq/regexpx包。 另外,也可以简单使用tk包中与正则表达式相关的几个快捷函数,无需引用其他的包。 下面是一段代码...阅读全文

简书 2020-08-18 16:41:10 陆满庭

监控系列讲座(十四)Zabbix5.0与新特性

学习目标 了解Zabbix 5.0 快速搭建Zabbix 1. 简介 Zabbix在开源监控界算是比较知名的,主要是他的社区活跃,监控模板众多。虽然在云原生时代,他的设计理念可能和目前容器化架构有一些隔阂,但是并不影响他在数据中心级别监控的地位。我们常用的功能,比如:分布式服务,分布式采集,画图功能,和强大的自定义功能,都是我们在数据中心级别监控中不可或缺的。 而我们使用zabbix的最重要的原因之一,或者说zabbix之所以还依然屹立不倒的原因之一,就是他的主动发现功能。尽管他没办法像prom...阅读全文

简书 2020-08-18 16:41:10 炼狱腾蛇Eric

基于Rust-vmm实现Kubernetes运行时

随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸、水平攻击、DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行。安全容器技术孕育而生,产生了kata、gVisor、unikernel等多种安全容器方案。本文旨在介绍各种安全容器方案,分析各方案特点,结合腾讯在容器安全领域的实践,帮助读者选择适合自身特性的容器运行时。同时引入Rust-VMM项目,介绍 Rust-VMM 技术和生态,演示如何使用K8s调度和启用Rust-VMM安全容器运行时,展望...阅读全文

简书 2020-08-18 16:38:26 腾讯云原生

为什么不使用 Kubernetes

![When to choose Kubernetes?](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200603-Why-Not-Use-Kubernetes/00.png) 很多团队都很兴奋地开始使用 Kubernetes。其中一些团队希望能充分利用它的弹性、灵活性、可移植性、可靠性以及其他的一些 Kubernetes 能原生地提供的优势。也有些团队只是热衷于技术,仅仅想使用下这个平台,来更好...阅读全文

Go语言中文网 2020-08-18 16:38:06 lxbwolf

CentOS7安装Go环境

一、下载go 执行wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz或者下载tar包到本地再上传到服务器; 注:Go下载地址:go1.10.1.linux-amd64.tar.gz 建立Go目录:mkdir /go/work/go 建立GoPath目录:mkdir /go/work/gopath 解压缩:mv go1.10.1.linux-amd64.tar.gz /go/work/; tar -xvf go1.1...阅读全文

简书 2020-08-18 16:32:54 虾米咬小米

我是如何在 Go 中构建 Web 服务的

从用了近十年的 C# 转到 Go 是一个有趣的旅程。有时,我陶醉于 Go 的[简洁](https://www.youtube.com/watch?v=rFejpH_tAHM);也有些时候,当熟悉的 OOP (面向对象编程)[模式](https://en.wikipedia.org/wiki/Software_design_pattern)无法在 Go 代码中使用的时候会感到沮丧。幸运的是,我已经摸索出了一些写 HTTP 服务的模式,在我的团队中应用地很好。 当在公司项目上工作时,我倾向把可...阅读全文

Go语言中文网 2020-08-18 16:23:02 dust347