golang
桂成林
这个作者很懒,什么都没留下…
展开
-
Go语言 读写锁&互斥锁原理剖析(2)
互斥锁从原理上要比读写锁复杂,Go语言中提供了标准库sync.Mutex,两种操作模式:正常模式:所有协程以先进先出(FIFO)方式进行排队,被唤醒的协程同样需要竞争方式争夺锁,新协程争抢会有优势,因为他们已经运行在CPU上,更容易抢到锁,如果一个协程在等待超过1毫秒会自动切换到饥饿模式下。 饥饿模式:互斥锁会直接由解锁的协程交给队列头部的等待者,新争抢者不能直接获得锁,不尝试自旋,会老...原创 2020-04-26 17:24:50 · 1003 阅读 · 0 评论 -
Go语言 读写锁&互斥锁原理剖析(1)
读写锁首先我们看rwmutex.go里面定义了RWMutex结构体,RWMutex继承于Lockertype Locker interface { Lock() Unlock()}type RWMutex struct { w Mutex // 互斥锁,写锁协程获取该锁后,其他写锁处于阻塞等待 writerSem uint32 // 写入等待信号量,...原创 2020-04-25 15:58:09 · 918 阅读 · 0 评论 -
Nginx反向代理+Go服务实践
前言在后端开发期间,会为前端或者平台上提供API服务接口,这时、我们看完今天的文章可以详细了解到Nginx反向代理到后端服务上的过程。Nginx:是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。可以做反向代理、正向代理,静态服务器等。负载均衡算法:upstrem支持4种负载均衡调度算法:轮询(weight):每个请求按时间顺序逐一...原创 2020-04-22 22:09:47 · 1395 阅读 · 0 评论 -
Go语言中面向对象
Go语言面向对象: Go语言中没有明确的OOP(Object Oriented Programming)概念, Go语言中只提供了两个关键类型:struct和interface,struct与C++的普通类相似,interface对应的是抽象类的类型。 面积对象是借助struct结构体实现的,interface则是定义接口的。一、类的封装示例讲解:首先我们定义一个汽...原创 2020-04-20 15:35:41 · 607 阅读 · 0 评论 -
Go语言讲解深拷贝与浅拷贝
一、概念1、深拷贝(Deep Copy):拷贝的是数据本身,创造一个样的新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值。既然内存地址不同,释放内存地址时,可分别释放。值类型的数据,默认全部都是深复制,Array、Int、String、Struct、Float,Bool。2、浅拷贝(Shallow Copy):拷贝...原创 2020-04-18 17:37:27 · 3061 阅读 · 0 评论 -
Go语言 命令行解析(一)
命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点!在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用Usage来打印帮助信息了。那么开始今天的话题之前,我们回顾一下在C语言中是如何解析传递的参数的。示例代码:#include <stdio.h>#include <...原创 2020-04-16 16:16:59 · 446 阅读 · 0 评论 -
Go语言 命令行解析(二)
命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点。在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用Usage来打印帮助信息了。在Go语言中urfave/cli是一个简单快速的命令行包,用于在Go语言中构建命令行应用程序,目的是使开发人员能够以表达的方式编写快速分发的命令行应用程序,urfave/...原创 2020-04-17 16:24:12 · 827 阅读 · 0 评论 -
Go语言 可变参数
最近与同事讨论时,提到Go语言的可变参数,之前没有总结过相关知识点,今天我们介绍一下Go语言的可变参数。可变参数(Variable Parameters):参数数量可变的函数称之为可变参数函数,主要是在使用语法糖(syntactic sugar)。最经典的例子就是fmt.Printf()和类似的函数,fmt.Printf首先接收一个参数,后面可接收若干个参数。实例一:func1使用的是...原创 2020-04-14 14:25:48 · 1146 阅读 · 0 评论 -
Go语言 Yaml编码和解码
前言Yaml文件mysql: user: root password: 123456 host: 192.198.1.1 port: 3306 dbname: mdbredis: host: 192.168.1.1 port: 1234 auth: 123456nginx_proxy: counter: 3 nginx_list: ...原创 2020-04-02 23:14:01 · 1789 阅读 · 0 评论 -
Go语言 ProtoBuf 序列化和反序列化
前言Protobuf是Google开发的一个网络通信协议,提供了高效率的序列化和反序列化机制,序列化就是把对象转换成二进制数据发送给服务端,反序列化就是将收到的二进制数据转换成对应的对象。官方版本支持Go,C++,Java,Python等语言。Go语言中Protocol Buffers是一个灵活、高效的、自动化的用于对结构数据进行序列化和反序列化协议,与XML、Json相比,Pro...原创 2020-04-02 16:30:16 · 3022 阅读 · 0 评论 -
Go语言 XML生成和解析
前言XML解析:实例XML实例<?xml version="1.0" encoding="utf-8"?><devices version="1"> <device> <deviceName>智能摄像头</deviceName> <deviceCode>1000...原创 2020-03-31 14:24:31 · 2314 阅读 · 0 评论 -
Go语言 模糊搜索实验(一)
模糊搜索要达到的目标是用户不需要关心搜索系统的结构,任意输入一串字符或者数字,只要搜索范围中包含该信息,通过该方法就能够找出该信息包含在哪个表,哪个字段里,或者具体哪个位置,进而可以进行更为详细的查询。系统允许被搜索信息和搜索提问之间存在一定的差异,这种差异就是“模糊”在搜索中的含义。例如,查找名字Smith时,就会找出与之相似的Smithe, Smythe, Smyth, Smitt等。...原创 2020-03-29 19:05:55 · 2100 阅读 · 0 评论 -
Go语言 中文分词技术使用技巧(一)
https://www.kutu66.com//GitHub/article_132948https://php.ctolib.com/gojieba.html原创 2020-03-27 16:15:51 · 3923 阅读 · 0 评论 -
分布式id生成器
有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id。以支持业务中的高并发场景。比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+。明星出轨时,会有大量热情的粉丝发微博以表心意,同样会在短时间内产生大量的消息。在插入数据库之前,我们需要给这些消息、订单先打上一个ID,然后再插入到我们的数据库。对这个id的要求是希望其中能带有一些时间信息,这样即使...转载 2019-05-27 17:27:10 · 430 阅读 · 0 评论 -
Go语言 gRPC 实践(一)
says_rpc.protosyntax = "proto2";option cc_generic_services = true;option java_generic_services = true;option py_generic_services = true;package says_rpc;option go_package = "pb_models/says...原创 2020-03-29 13:05:16 · 2028 阅读 · 0 评论 -
Golang 垃圾回收剖析
1. Golang GC 发展Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier2. GC 算法简介这一小节介绍三种经典的 GC 算法:引用计数(转载 2017-10-20 14:27:43 · 1186 阅读 · 0 评论 -
Golang Thrift Hive
package mainimport ( hive "github.com/araddon/hive" "log" "fmt")func init() { hive.MakePool("localhost:10000")}func main() { conn, err := hive.GetHiv翻译 2016-10-13 16:57:47 · 2804 阅读 · 0 评论