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

Golang 源码剖析:log 标准库

Golang 源码剖析:log 标准库 日志 输出 2018/09/28 20:03:08 EDDYCJY Blog... 构成 [日期]<空格>[时分秒]<空格>[内容]<\n> 源码剖析 Logger type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte } mu:互斥锁,用于确保原子的写入 prefix:每行需写入的日志前缀内容 flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下标识位: const ( Ldate = 1 << iota // value: 1 Ltime // value: 2 Lmicroseconds // value: 4 Llongf...阅读全文

博文 2019-03-26 09:30:33 EDDYCJY

golang 基础(18)字符串

square-gopher.png 字符串 immutability 字符串是不可变类型 strigs 标准库提供字符串基本操作 strconv 字符串与其他类型的转换 func main() { var c byte = 'H' fmt.Println(c) mj := string(45) fmt.Println(mj) } 我们尝试输出c byte = 'H'``和string(45)`` 72 - 结果可能预期有些差别,如果我们将```mj := string(72)`` 我们就会得到 72 H 在 go 语言会将 sybmol(符号)看作数字,而将string是作为sybmole 的数组 "hello world" 在 go 眼里是数组[72 101 100 108 111...]...阅读全文

开源一个顺手的golang web开发轮子fastgo

FastGO 框架 简介 一个简单实用的go http框架, 支持命令行自定义cmd操作.基于gin web框架,gorm db操作,用起来比较顺手的轮子。 特性 支持access 与 panic recovery中间件,内含完整的日志记录。 基于logrus封装有log类库, 日志等级分级与自动切割,支持自定义日志保存和分割周期。 支持秒级cron定时任务配置,内含demo。 基于gorm,框架内含db初始化工具。 基于toml配置文件,含有完整解析类库 内含http请求工具类库。 使用go mod包管理工具,不依赖GOPATH的设置 内含Dockerfile与Makefile支持一键编译docker镜像,内涵docker-compose.yml示例支持一键容器运行 基本实用 #基于命令行...阅读全文

博文 2020-03-21 04:32:45 Ucan先生

关于 Python_你一定没读过的8个技巧

介绍 Python 功能和小技巧的文章网上有无数篇,比如变量解压缩,partial 偏函数,枚举可迭代对象... 但关于 Python 我们能说的还有很多。所以今天我将向大家展示一些我知道和有使用过的特性,这些特性在其它文章或博客中很少被提及:### 消毒字符串输入对用户输入内容进行消毒几乎适用于你写的每一个程序。通常来说转换字符大小写的操作就足够了,有时候用 Regex 正则表达式就能完成,但对于比较复杂的情况,我们有更好的办法:```user_input = "This\nstring has\tsome whitespaces...\r\n"character_map = {ord('\n') : ' ',ord('\t') : ' ',ord('\r') : None}user_in...阅读全文

博文 2019-12-14 19:32:40 是程序员吖

Golang 源码剖析:fmt 标准库 --- Print* 是怎么样输出的?

Golang 源码剖析:fmt 标准库 --- Print* 是怎么样输出的? 前言 package main import ( "fmt" ) func main() { fmt.Println("Hello World!") } 标准开场见多了,那内部标准库又是怎么输出这段英文的呢?今天一起来围观下源码吧 🤭 原型 func Print(a ...interface{}) (n int, err error) { return Fprint(os.Stdout, a...) } func Println(a ...interface{}) (n int, err error) { return Fprintln(os.Stdout, a...) } func Printf(format ...阅读全文

博文 2019-03-26 09:31:21 EDDYCJY

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名为main.gogo源文件以.go作为后缀,命名时建议统一为小写英文字母用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码package main import "fm...阅读全文

博文 2020-02-09 00:33:10 jonson_jackson

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld 在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux 本文将介绍如何书写、编译、并运行第一个go语言程序 同时详细介绍其内部机制 书写第一个go语言程序 首先我们可以在任意位置新建一个文件,命名为main.go go源文件以.go作为后缀,命名时建议统一为小写英文字母 用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码 package main import "fmt...阅读全文

博文 2020-02-12 07:32:58 唯识相链2

二、Service Mesh 演进历程

第二个部分和大家追溯一下 Service Mesh 的演进历程。要注意,虽然 Service Mesh 这个词汇直到 2016 年 9 才有,但是它表述的东西很早以前就出现了。首先看“远古时代”,第一代网络计算机系统,最早的时候开发人员需要在自己的代码里处理网络通讯的细节问题,比如说数据包顺序、流量控制等等,导致网络逻辑和业务逻辑混杂在一起,这样是不行的。接下来出现了 TCP/IP 技术,解决了流量控制问题,从右边的图上可以看到,功能其实没发生变化:所有的功能都在,代码还是要写。但是,最重要的事情,流程控制,已经从应用程序里面抽出来了。对比左右两边的图,抽出来之后被做成了操作系统网络层的一部分,这就是 TCP/IP,这样的话应用的结构就简单了。现在写应有,就不用考虑网卡到底怎么发。在 TCP...阅读全文

博文 2018-12-14 14:34:46 蒲熠星F1

Golang的json包

本文对常见的json包做一些介绍,方便快速入门。每一小节均有示例说明。大家在实际开发中可以选择适合自己的json包。 encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码。使用的时候需要预定义struct,原理是通过reflection和interface来完成工作, 性能低。 常用的接口: func Marshal(v interface{}) ([]byte, error) 生成JSON func Unmarshal(data []byte, v interface{}) error 解析JSON到struct 示例1 生成JSON: type ColorGroup struct { ID int Name st...阅读全文

博文 2019-11-10 20:02:37 飞鸿影

Go 问答 101

本文译自 Go FAQ 101 版权@归原文所有. 编译器和运行时编译错误 non-name *** on left side of := 什么意思到现在为止(Go 1.10), 对于短变量声明有一个强制性规则: := 左侧的所有条目必须是纯标识符, 并且至少有一个是新变量名. 这意味着容器元素(x[i]), 结构体字段(x.f), 指针解引用(*)以及限制性标识符不能出现在 := 的左侧. 目前, 针对这个问题有一个公开 issue. 看起来 Go 作者们想把这个问题留到 Go 2.0. 编译错误 unexpected newline, expecting { … 什么意思在 Go 中, 我们不能在随意的位置折断一行代码. 具体细节可以阅读 Go 换行规则. 通过该规则, 一般来说, 在大...阅读全文

博文 2019-04-01 14:17:37 lingchao.xin

Go - atomic包使用及atomic.Value源码分析

1. Go中的原子操作 原子性:一个或多个操作在CPU的执行过程中不被中断的特性,称为原子性。这些操作对外表现成一个不可分割的整体,他们要么都执行,要么都不执行,外界不会看到他们只执行到一半的状态。 原子操作:进行过程中不能被中断的操作,原子操作由底层硬件支持,而锁则是由操作系统提供的API实现,若实现相同的功能,前者通常会更有效率 最小案例: package main import ( "sync" "fmt" ) var count int func add(wg *sync.WaitGroup) { defer wg.Done() count++ } func main() { wg := sync.WaitGroup{} wg.Add(1000) for i := 0; i < 10...阅读全文

博文 2020-01-26 18:34:20 Takagi_san

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

老弟在吗,我怀疑Go标准库中的二分查找有bug!

"老弟在吗,我怀疑Go标准库中的二分查找有bug!" "老哥别慌,源码之前没有秘密,你坐下听我吹吹c++的牛逼。。" 下面这段Go代码,你觉得index的结果是多少? arr := []int{1, 3, 5, 7} index := sort.Search(len(arr), func(i int) bool { return arr[i] == 3 }) index的结果并不是1,而是4。(额,返回4是什么鬼,难道不应该找到就返回对应的下标,找不到就返回-1吗) 我们映象中的二分是这样的: while (low <= high) { mid := (low + high) / 2 if arr[mid] < target { low = mid + 1 } else if arr[mid...阅读全文

博文 2020-05-01 14:32:40 就想叫yoko

[译] 初学者需要了解的Go语言中的HTTP timeout

文链接 itnext.io/http-reques… ​ 对于提高分布式系统的可用性,请求超时是非常重要的一个部分,当系统某个部分出现故障时超时机制可以降低故障对整个分布式系统的影响,就如下面这条twitter中提到的。 问题 在go语言中应该如何合理的模拟一个504 http.StatusGatewayTimeout响应呢? 之前在开发一个OAuth token授权功能的时候,我曾试着用httptest去模拟服务端超时并返回504 http.StatusGatewayTimeout响应,然而我实现的效果却是客户端由于没有在设定的时间内得到响应而超时退出,而不是服务端返回了504的status code。如同大多数,当时我像下面这样使用标准库的HTTP包去创建一个client对象并指定tim...阅读全文

博文 2020-02-01 01:34:16 mikellxy

Go标准库database/sql,Rows.Scan NULL问题

使用Go标准库database/sql,Rows.Scan如果遇到NULL,则会报错,并且停止Scan后续的字段,导致获得的数据不完整。 比如: ``` type TblUser struct { Id int64 LastIp string NickName string Avatar string Lang string } ``` 假设LastIp为NULL,其他字段都有数据,但是Rows.Scan的时候,只能识别出Id,其他字段都无法正确读出。 而NULL在数据库又很容易遇到,摸索了一段时间,找到一个方案,先上代码: ``` m := new(TblUser) dest := []interface{}{&(m.Id), &(m.LastIp), &(m.NickName), &(m...阅读全文

博文 2020-05-21 17:56:56 saxon134

聊聊新的Go语言错误处理方案

今天早些时候,golang/x/exp中默默的更新了一个名曰xerrors的包,这个包和同样处于golang/x/exp下的另一个名叫errors的包名字十分相似,就连介绍也都一致: 123 Package errors implements functions to manipulate errors.This package implements the Go 2 draft designs for error inspection and printing 从目前的情况来看,基本上错误的处理形式基本已经定型,处理方式则是类似于之前的另一个github.com/pkg/errors包,但是具体细节不尽相同。 如何处理error?在之前介绍文章中提到过github.com/pkg/erro...阅读全文

博文 2020-02-22 17:56:09 ipfans's Blog

生存还是毁灭?一文读懂挖矿木马的战略战术

前言比特币等虚拟货币在2019年迎来了久违的大幅上涨,从最低3000美元上涨至7月份的14000美元,涨幅达300%,巨大的金钱诱惑使得更多的黑产团伙加入了恶意挖矿的行列。阿里云安全团队通过对云上僵尸网络家族的监控,发现恶意挖矿已成为黑产团伙主要的牟利方式。2019年共监控到58个成规模的挖矿木马团伙(数据截止到8月底),以累积感染量定义木马活跃度,下图/表是活跃TOP10的木马家族及简介。本文尝试从宏观角度分析、总结挖矿木马常用技术及发展趋势,以期能够给企业安全防护带来启示。 核心观点木马投放方式全面蠕虫化,多种漏洞组合攻击成为趋势,N-day漏洞利用速度在加快  这种趋势无疑令人异常担忧,意味着挖矿木马的传播能力在大幅增强,变得无孔不入。一旦企业的信息系统存在任意可被利用的漏洞,那么企业...阅读全文

博文 2019-10-18 18:33:03 aside section ._1OhGeD

技术和算法的抉择

上大学已经两年了,这两年来学到了不少的东西,在互联网的时代,每个程序员都不得不学习新的知识,以充实自己,避免被不断更新迭代的时代所淘汰。在大学里,每一个学习计算机的同学都在面临两个抉择——技术和算法,我们应该优先选择哪一个更合适?此处所谈到的“技术”是指一些在职场上常用到的专业技能,比如学习一些Java的开发,从JSP和Servlet到Spring全家桶;Golang的web开发到高并发的解决;服务器的一些部署,Docker和K8S(kubernetes的k和s之间有8个字母),shell脚本等;而算法是指一些算法类型和数据结构等用来竞赛和研究底层逻辑的知识点,比如链表、队列、栈、树和图等。这两年来,我一直在学习前者,对后者是有所懈怠的,虽然在大学阶段也有开设算法程序设计和数据结构课程,但我...阅读全文

博文 2019-10-12 11:32:48 aside section ._1OhGeD

使用golang反向代理统计api访问次数

前言 今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无入侵,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。 思路 首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由业务软件的流量,都需要经过monitor这一层,这让人很容易得想到了网关的功能也是类似的。恰好,golang实现反向代理十分简单。所以,思路就有了。先实现一个反向代理,将经由业务的流量都由monitor反向代理给业务软件。接着,将访问的api放进通道中,对api进行分类,就可以统计api的访问量了。...阅读全文

博文 2020-03-15 15:32:43 onepunchgo

Golang笔记01之学习方法

2019-06-13 今天开始,我有了新的目标,就是加入简书这个公司。我看到他们公司在招聘golang/ruby相关的技术人员,我特别希望我能够去简书工作。于是打算在简书这里书写一些技术博客。 我的go语言学习方法: 复盘go标准库中的代码 阅读书籍和维基百科了解go的设计模式 观看先关技术先驱的教程学习go语言的软件工程 自己从零开始制作一个go语言的小型网站 end... 附录:我的go语言书籍,排名分先后: 《Go程序设计语言》 我最喜欢的一本go语言的...阅读全文

博文 2019-06-13 11:02:47 我加入简书的路程

Golang构建Python高性能模块

package mainimport "C"​//指定那些函数能被外部调用//export testfunc test() int{ //计算 0-1000000000 的和 var s int for a := 0; a <= 10000000000; a++ { s += a } return s}​//pxport addstrfunc addstr(a,b * C.char) *C.char{ merge := C.GoString(a) + C.GoString(b) return C.CString(merge)​}func main(){}编译生成动态链接库,生成的.so文件可以被python加载并调用但是有一个需要注意的地方:Python是利用ctypes来跟so模块进行交互...阅读全文

博文 2020-05-20 16:53:43 大熊_7d48

13.Go语言标准库之time包

1.time包 time包提供了时间的系那是和测量用的函数。日历的计算采用的是公历。 1.1时间类型 time.Time类型表示时间。我们可以通过time.Now()函数获取当前的事件对象,然后获取时间对象的年月日时分秒等信息。 package main import ( "fmt" "time" ) func main() { now := time.Now() //获取当前时间 fmt.Printf("current time:%v\n", now) year := now.Year() //年 month := now.Month() //月 day := now.Day() //日 hour := now.Hour() //小时 minute := now.Minute() //分钟...阅读全文

博文 2020-02-06 20:33:17 DevOperater

MySQL学习中,数据库事务有哪些特性?

MySQL数据库学习中,总有人会遇到问题,在面对问题的时候,我们一般都是自己先思索、解决,自己无法解答的时候,求助于他人。这是一个很好的习惯,有自学的能力,也有请教的态度。那么有朋友就问了,啥是数据库事务啊,事务又有哪些特性? 什么是数据库事务? ACID是逻辑上的一组操作,组成这个操作的各个单元,要不全部都成功,要不全部都失败,这个特性就是事务。 那事务有什么特性呢? 原子性(atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成 一致性(consistency):事物必须始终保持系统处于一致的状态,不管在任何给定的时间并发事物有多少。 隔离性(isolation):当多个事务并发访问同一个数据源时,数据库能够保持每个访问的事务之间是隔离的,互不影响。 持久化(durab...阅读全文

博文 2019-11-15 16:39:20 zhouzhou2018

理解Go标准库中的atomic.Value类型

在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地”存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有人报告了encoding/gob包在多核机器上(80-core)上的性能问题,认为encoding/gob之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex),如果把这些互斥锁换成用atomic.LoadPointer/StorePointer来做并发控制,...阅读全文

博文 2019-07-08 11:51:39 喵叔没话说

Go 语言 Excel 文档基础库发布 2.1.0 版本

github.com/360EntSecGroup-Skylar/excelize

[Excelize](https://github.com/xuri/excelize) 是 Go 语言编写的用于操作 Office Excel 文档类库,基于 ECMA-376 Office Open XML 标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的 XLSX 文档。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)、透视表和切片器等复杂样...阅读全文

golang xorm postgresql数据库操作

1.连接数据库func Connect()(* xorm.Engine) {str := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbName)engine,err := xorm.NewEngine("postgres",str)if err != nil {log.Fatal(err)return nil }err = engine.Ping()if err != nil {log.Fatal(err)return nil }engine.Logger().SetLevel(core.LOG_DEBUG)f,err :=...阅读全文

博文 2019-08-13 18:32:46 dullswords

Chaos Mesh - 让时间在容器中自由摇摆

Chaos Mesh 是最近开源的 Kubernetes 混沌测试平台,并且最近支持了 TimeChaos 的新功能,用来模拟 Time skew 的情况,通常情况下,我们知道直接修在容器中修改时间,会影响整个物理节点, 这不是我们想要的,那么 Chaos Mesh 是如何解决这个问题的呢?接下来就让我们一起探索一下 Chaos Mesh 是如何在容器中让时间自由摇摆起来的! Time skew 是什么? Time Skew 直接翻译就是时间偏移,白话一点就是我们从节点上获取的时间和当前真实的时间出现偏差。 为什么需要模拟 Time skew 呢? 分布式数据库要实现全局一致性快照,需要解决不同节点之间时钟一致的问题。工业界目前有三种解决方案: 全局集中式授时服务 混合逻辑时钟(HLC) 原...阅读全文

博文 2020-03-24 00:32:44 CwenYin

《Go语言程序设计》 读书笔记 (八) 包

Go语言有超过100个的标准包(可以用go list std | wc -l命令查看标准包的具体数目),标准库为大多数的程序提供了必要的基础构件。在Go的社区,有很多成熟的包被设计、共享、重用和改进,目前互联网上已经发布了非常多的Go语言开源包,它们可以通过 http://godoc.org 检索。在本章,我们将演示如果使用已有的包和创建新的包。 包简介 任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的单元以便于理解和更新,在每个单元更新的同时保持和程序中其它单元的相对独立性。这种模块化的特性允许每个包可以被其它的不同项目共享和重用,在项目范围内、甚至全球范围统一地分发和复用。 每个包一般都定义了一个不同的命名空间用于它内部的每个标识符的访问。每个...阅读全文

博文 2020-01-13 13:32:41 Kevin

14.Go语言标准库flag基本使用

Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 1.os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 os.Args十一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。 package main import ( "fmt" "os" ) func main() { //os.Args是一个[]string if len(os.Args)>0{ for index,arg := range os.Args{ fmt.Printf("args[%d]=%v\n",index,arg) } } } 结果: ➜ test go build -o "args_demo" ➜ test...阅读全文

博文 2020-02-07 01:33:11 DevOperater

[译] Part 30: Golang 中的Error处理

文地址:Part 30: Error Handling 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 什么是Error? Error表示程序中的异常情况。假设我们正在尝试打开文件,文件系统中不存在该文件,那么这是一种异常情况,它就代表一种error。 Go中使用内置的error类型表示错误。 就像任何其他的内置类型,如int,float64,... error可以存储在变量中,从函数返回等等。 例子 用打开了一个不存在的文件的示例程序来解释一下。 package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err != nil { fmt.Println(err) ret...阅读全文

博文 2019-03-31 18:34:39 咔叽咔叽_7647

【GO】详解GOROOT和GOPATH

GOROOT 其实就是golang 的安装路径 当你安装好golang之后其实这个就已经有了 GOPATH 作用: 存放sdk以外的第三方类库 自己收藏的可复用的代码 目录结构:$GOPATH目录约定有三个子目录 src存放源代码(比如:.go .c .h .s等) 按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。 pkg编译时生成的中间文件(比如:.a) golang编译包时 bin编译后生成的可执行文件(为了方便,可以把此目录加入到 {GOPATH/bin:}/bin添加所有的bin目录) Goland里边的Project GPPATH 这里有俩个一个是Global GOPATH 一个是Project GOPATH Globa...阅读全文

博文 2020-03-21 04:32:51 咔咔手赚网

Golang-reflect反射的实际中的应用及畅想

1. 🎼 解决了什么 原文https://mojotv.cn/go/golang-reflect-string 我有很多行日志数据单行的格式是这样的 HOST;000012000629948340196501;ipv4;3; ips: user_id=2;user_name=172.21.1.102;policy_id=1;src_mac=52:54:00:62:7f:4a;dst_mac=58:69:6c:7b:fa:e7;src_ip=172.21.1.102;dst_ip=172.22.2.3;src_port=48612;dst_port=80;app_name=网页浏览(HTTP);protocol=TCP;app_protocol=HTTP;event_id=1310909;ev...阅读全文

博文 2020-01-14 18:32:39 TechMojotv

关于收集,标准化和集中化处理Golang日志的一些建议

依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。 这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。 日志包的选择 Go标准库的日志库非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,流行的日志框架包括logrus、zap、glog等。我们先来大致看下这些日志库的特点...阅读全文

博文 2020-03-25 12:32:43 KevinYan_a990

使用golang反向代理统计api访问次数

前言 今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无***,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。 思路 首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由业务软件的流量,都需要经过monitor这一层,这让人很容易得想到了网关的功能也是类似的。恰好,golang实现反向代理十分简单。所以,思路就有了。先实现一个反向代理,将经由业务的流量都由monitor反向代理给业务软件。接着,将访问的api放进通道中,对api进行分类,就可以统计api的访问量了...阅读全文

博文 2020-03-15 22:33:47 wx5e1abbbb0a5e5

Oracle数据库查询用 where in 查询的项超过1000条的解决方案

func GetWhereInValuesSql(column string, list []string, num int) string { valueSize := len(list) if valueSize == 0 { return "" } sql := "(" add := 0 if valueSize%num != 0 { add = 1 } batchSize := valueSize/num + add for i := 0; i < batchSize; i++ { if i > 0 { sql += ") or " } sql += column + " in (" for j := i * num; (j < (i+1)*num) && j < valueSize...阅读全文

博文 2020-04-10 10:45:35 qianyer

2019-08-07

2019-08-07MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。mongodb特点它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:*面向集合存储,易存储对象类型的数据。模式自由。*支持动态查询。*支持完全索引,包含内部对象。*支持查询。*支持复制和故障恢复。*使用高效的二进制数据存储,包括大型对象(如视频等)。*自动处理碎片,以支持云计算层次的扩展性。*支持 Gol...阅读全文

博文 2019-08-08 10:33:16 Overonenewsi

2019-08-07

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。mongodb特点它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:*面向集合存储,易存储对象类型的数据。模式自由。*支持动态查询。*支持完全索引,包含内部对象。*支持查询。*支持复制和故障恢复。*使用高效的...阅读全文

通过例子来学习 Go 和 Rust ---- RwLock 读写锁

读写锁顾名思义就是只允许单进程同时写,在数据没有被写的情况下允许多进程同时读,的锁。 rust 里和 Mutex 类似,使用RAII(Resource Acquisition Is Initialization)来保证在值被Drop的时候自动解锁。而 go 里依然是需要手动解锁。 举个改写自Go标准库测试的栗子 import ( . "sync" "sync/atomic" ) const NumIterations = 1000 const NumReaders = 1000 func writer(rwm *RWMutex, activity *int32, cdone chan bool) { for i := 0; i < NumIterations; i++ { rwm.Lock(...阅读全文

博文 2020-03-06 11:33:22 Tericoder

[译] Go 语言概览

文地址:A bird's eye view of Go 原文作者:Axel Wagner 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:JackEggie 校对者:40m41h42t, JalanJiang Go 语言概览 本文摘要:本文非常笼统地总结了 Go 语言的定义、生态系统和实现方式,也尽力给出了与不同的需求所对应的参考文档,详情参见本文末尾。 每当我们说起“Go 语言”的时候,可能会因为场景的不同聊到很多完全不同的东西。因此,我尝试着对 Go 语言和其生态系统做一个概述,并在各部分内容中都列出相关的文档(这可能有点像是大杂烩,其中还包含了我最近实际遇到的许多问题)。让我们开始吧: Go 编程语言 Go 语言是一种编程语言。作为一种权威,...阅读全文

博文 2019-07-25 02:04:28 JackEggie

golang 命令行参数解析 hflag

## 简介 `hflag` 是被设计用来替代标准的 `flag` 库,提供更强大更灵活的命令行解析功能,相比标准库,`hflag` 有如下特点 - 支持可选参数和必选参数 - 支持参数缩写 - 支持位置参数,位置参数可以出现在任意位置 - 支持 bool 参数简写 (`-aux` 和 `-a -u -x` 等效) - 支持值参数缩写 (`-p123456` 和 `-p 123456` 等效) - 更多类型的支持,支持 `net.IP`,`time.Time`,`time.Duration`,`[]int`, `[]string` 的解析 - 更友好的用法帮助 - 提供一套更简洁的 api - 完全兼容 flag 接口 ## 用法 `hflag` 提供两套 `api`,一套完全兼容标准库的 `...阅读全文

博文 2019-11-28 17:58:32 hatlonely

reflect反射的实际中的应用及畅想

文地址[https://mojotv.cn/go/golang-reflect-string] 1. 🎼 解决了什么 我有很多行日志数据单行的格式是这样的 HOST;000012000629948340196501;ipv4;3; ips: user_id=2;user_name=172.21.1.102;policy_id=1;src_mac=52:54:00:62:7f:4a;dst_mac=58:69:6c:7b:fa:e7;src_ip=172.21.1.102;dst_ip=172.22.2.3;src_port=48612;dst_port=80;app_name=网页浏览(HTTP);protocol=TCP;app_protocol=HTTP;event_id=1310909...阅读全文

lesson-1:go 第一个程序

什么是 GO 程序 go 程序是一段简单的 UTF-8 编码的以 .go 结尾的文件。 GO 程序结构 package main // 创建一个 main 包,使用关键字 package import "fmt" // 从 Go 标准库中引入 fmt 包,使用关键字 import func main() { // 入口函数 fmt.Println("hello go") // fmt包中 Println 函数 } Go 程序都必须以一个包开头,必须包含一个 main 函数。main 函数是程序的入口函数。 $ go run ./hello.go // 执行 hello.go 文...阅读全文

博文 2020-01-14 11:32:44 Gabriel

Excelize - Go 语言 (golang) Excel 文档基础库

前言 Excelize 是 Go 语言 (golang) 编写的用于操作 Office Excel 电子表格的文档基础库,基于 ECMA-376 Office Open XML 标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的 XLSX / XLSM / XLTM 等格式文档。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)、透视表和切片器等复杂样式的文档,还支持向 Excel 文档中插入图片与图表,并且在保存后不会丢失文档原有样式,可以应用于各类报表系统、云计算和边缘计算系统中。入选 2018 开源中国码云 Gitee 最有价值开源项目 GVP,目前已成为 Go 语言最受欢迎的 Excel 文档基础库。 开源代码 GitHub:...阅读全文

博文 2020-04-09 05:33:11 阿泽Aze

关于收集,标准化和集中化处理Golang日志的一些建议

依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。 这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。 日志包的选择 Go标准库的日志库非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,流行的日志框架包括logrus、zap、glog等。我们先来大致看下这些日志库的特点...阅读全文

博文 2020-03-22 22:34:26 kevinyan

第一个Go程序

学习一门新的编程语言,当然躲不过hello world了。下面是go版本的hello world package main // 声明自己属于main包 import "fmt" // 导入标准库代码包fmt // 入口函数,也称主函数 func main() { fmt.Println("Hello World") // 打印Hello World } goland可以直接点run运行,也可以使用命令行来执行。 cd到该文件目录下 go build main.go // main.go是该文件名,文件名可以自己定 默认编译出的可执行文件名就是main,windows下是main.exe, 直接 main.exe,就可以看到输出...阅读全文

博文 2020-02-24 17:32:43 iuoui

区块链兼容以太坊智能合约

链客,专为开发者而生,有问必答!此文章来自[区块链技术社区](https://www.liankexing.com),未经允许拒绝转载。 引言随着区块链技术以及应用的普及,越来越多的区块链出现在大众视野中。由于区块链技术的开源特性,任何公司和个人都可以方便快捷的获取最新的区块链核心技术,通过对这些技术的选择和整合,最后开发和搭建满足特定业务需求的区块链产品。以太坊作为目前区块链2.0的杰出代表被作为诸多区块链项目开发的基础,甚至有人统计100个区块链项目中有94个是基于以太坊,而以太坊社区更是有25万的开发者在活跃着,因此以太坊成为大家争相研究和进行区块链开发的典型。EVM作为以太坊中重要的组件,其运行着以太坊上至关重要的智能合约,由于以太坊庞大的社区和经济环境,作为一个新出现的区块链兼容以...阅读全文

博文 2019-08-19 20:02:48 链客区块链技术问答社区

Golang的包

包是golang的一种源码组织方式,一个以.go结尾的源码文件仅能归属于一个包。包可以看做一个类库或者命名空间,当在一个 .go 文件里导入一个包后,就可以使用该包里面的常量、变量、类型、函数名、结构字段等等。 目录结构: apps/ src/ helloworld/ hello.go init/ hello.go firstApp.go bin/ pkg/ helloworld/hello.go // hello.go package nihao import "fmt" func Shout() { fmt.Println("Hello, what's your name?") } func main() string { return "this is a function named...阅读全文

博文 2019-07-22 17:32:52 Mysic

这些 Python 高效率技巧,一般人都不会

你估计已经看了不少关于 Python 技巧的文章,里面可能会提到变量拆包(unpacking)、局部函数等,但是 Python 还有很多不为人知的高效用法,等待着被人发现。本文将介绍作者纵观全网之后,都属于很少没提及的技巧。入门Python其实很容易,但是我们要去坚持学习,每一天坚持很困难,我相信很多人学了一个星期就放弃了,为什么呢?其实没有好的学习资料给你去学习,你们是很难坚持的,这是小编收集的Python入门学习资料,关注公众号【百战编程】回复关键词“ 资料 ”,即可免费领取!希望对你们有帮助 清理字符串输入清理用户输入的问题,几乎适用于我们可能编写的每个程序。通常将字符转换为小写或大写就足够了,这时只需要使用正则即可,但是对于复杂的情况,有一种更好的方法:在上述示例中,可以看到空格符“...阅读全文

博文 2020-01-07 11:32:53 百战编程