Go从入门到入土
go语言学习之路
青丶空゛
一歩ずつ歩み続けてはじめて千里の遠くに行き着けるし.
(如果个别文章图片不见了,建议访问我的博客园找对应文章,[https://www.cnblogs.com/ailumiyana],懒癌又犯了,懒得改了 哈哈)
展开
-
[golang] go中如何监听一组channels
go中如何监听一组channelsreflect.Selectfunc Select(cases []SelectCase) (chosen int, recv Value, recvOK bool)cases := make([]reflect.SelectCase, len(chans))for i, ch := range chans { cases[i] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.Valu原创 2021-08-20 19:54:59 · 1010 阅读 · 0 评论 -
go笔记--几个例子理解context的作用
go笔记–几个例子理解context的作用文章目录go笔记--几个例子理解context的作用context interface先看一个简单的例程context的作用派生contxt经常在http框架里面看到一个context参数,它是做什么的呢,先简单看看它的定义。context interfacetype Context interface { // Deadline ret...原创 2020-01-17 18:20:51 · 1290 阅读 · 0 评论 -
go笔记--协程安全map的四种方法
go笔记–协程安全map的四种方法文章目录go笔记--协程安全map的四种方法读写锁sync.mapatomic.Valuechan读写锁这个应该是最简单的方法,读取的时候加读锁,修改的时候加写锁。type LockMap struct { m map[interface{}]interface{} sync.RWMutex}func (lm *LockMap) Get(key...原创 2019-12-26 12:16:32 · 1545 阅读 · 0 评论 -
go笔记--rpc和grpc使用
go笔记–rpc和grpc使用文章目录go笔记--rpc和grpc使用rpcserver.goclient.go (sync)client.go (async)grpcprotocserver.goclient.gorpcRPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议构建于T...原创 2019-12-19 19:29:45 · 821 阅读 · 0 评论 -
go笔记--json包使用
json包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系主要通过Marshal和Unmarshal函数实现Marshalfunc Marshal(v interface{}) ([]byte, error)Marshal函数返回v的json编码。Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其Marshal...原创 2019-12-15 19:55:37 · 333 阅读 · 0 评论 -
golang消息系统nats的消息传递模型介绍
nats的消息传递模型文章目录nats的消息传递模型What is NATS主题式消息(Subject-Based Messaging)主题的层次结构通配符发布订阅(Publish-Subscribe)example请求应答(Request-Reply)example队列组exampleAcknowledgementsexampleWhat is NATSnats是一个go语言开发的开源的...原创 2019-12-03 18:30:55 · 1844 阅读 · 0 评论 -
[golang] golang简洁的文件上传与接收服务
最近自己阿里云上的文件共享总是不怎么方便,本来开了samb,感觉也不是很便利,于是只能自己整个简洁点的了。不过用go的话也非常快啦。需要注意的是http post文件一般用的都是multipart表单格式,看一看就好了。uploadhandlepackage mainimport ( "io" "io/ioutil" "net/http" "os" ...原创 2019-12-01 16:11:00 · 2836 阅读 · 0 评论 -
[ffmpeg][goav]ffmpeg代码例子pcmu重采样并转码aac格式
8k双声道的pcmu格式重采样44.1kHz的aac格式例子src : 其中adts包是给aac填充头部的,这里就没给了。package mainimport( "github.com/ailumiyana/goav-incr/goav/avcodec" "github.com/ailumiyana/goav-incr/goav/avutil" "github.com/ailumiy...原创 2019-11-27 18:33:20 · 2300 阅读 · 0 评论 -
[ffmpeg] ffmpeg filter模型介绍及开发指南
[ffmpeg] ffmpeg filter模型介绍及开发指南文章目录[ffmpeg] ffmpeg filter模型介绍及开发指南FFmpeg filter简介滤镜链图介绍滤镜链图(filtergraph)滤镜链(filterchain)滤镜垫(filterpad)滤镜(filter)1、基本滤镜2、 滤镜链3、滤镜链图开发API主要API示例FFmpeg filter简介libavfi...原创 2019-11-22 15:02:09 · 1792 阅读 · 0 评论 -
docker初体验
文章目录docker 安装安装ubuntu容器本地主机与容器互联ssh最近在windows下跑流媒体服务器,但是登录服不太便利移植,决定试用下docker,在docker的ubuntu容器中跑另一个server。Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后...原创 2019-11-12 18:18:12 · 275 阅读 · 0 评论 -
[golang]select优先级
golang 的select 用来同步处理任务非常便利也十分安全,类似于c的epoll和c++里面的eventloop模型。如果select中的通道chan是无缓冲通道,那么很有可能丢失数据,两个定时任务同时发生时,可能只是随机执行了其中一个,另一个通道数据可能就丢失了,那么可以增加优先级来规避这个问题。除了数据丢失外,配置优先级主要还是为了解决随机性问题,如果一个缓冲通道的缓冲区一直是满的,...原创 2019-10-29 18:39:15 · 1241 阅读 · 0 评论 -
[golang]UDP端口池
[golang]UDP端口池)·好久没来csdn了,懒癌犯了,今天1024,水一篇文章吧,哈哈。池子会保存一定范围内数量的udp端口号,get获取一个put放回去一个源码: “github.com/ailumiyana/tools/udp”tools包里面还有一个延迟统计包和一个基于logrus的滚动日志package main import( "github.com/a...原创 2019-10-24 23:22:49 · 807 阅读 · 0 评论 -
[ffmpeg][vaapi][goav][golang] ffmpeg使用vaapi示例代码(基于goav-incr)
[ffmpeg][vaapi][goav][golang] ffmpeg使用vaapi代码示例(基于goav)自己写的一份比较完备的vaapi硬件加速示例代码,包含了vaapi的解码,编码,及滤波的使用。基于goav,介于goav还有点bug,几个内存释放的函数会crash, 有可能版本不一致吧,作者貌似也不维护了,就没给作者提,其次我还需要加点硬件加速代码,就弄了个goav-incr,只要还...原创 2019-10-24 11:09:21 · 2888 阅读 · 0 评论 -
一个go延迟统计工具
一个go延迟统计工具一个go延迟工具,从gin框架的日志中间件上掰下来的,帮助分析系统任务性能package mainimport ( "github.com/ailumiyana/latency" "fmt" "time")func main(){ qsv := latency.New("QSV", "QSV-Overlay") qsv.Start() time.Sl...原创 2019-08-02 18:38:23 · 1353 阅读 · 0 评论 -
golang--redigo中连接池的使用
redigo连接池的使用文章目录redigo连接池的使用前言conn连接池例程前言最近使用redigo的时候遇到了并发问题,于是想起了redigo并发是否存在安全性的问题,查了下源码,发现可以用连接池解决,简单介绍一下。connredigo实现了不止一种的Conn对象,一般初次使用,会用redis.Dial()获取一条连接对象。它是在conn.go中定义的对象。// conn is...原创 2019-07-16 20:20:27 · 3264 阅读 · 0 评论 -
gin框架源码学习笔记(二)中间件
gin框架源码学习笔记(二)中间件gin 默认时使用了logger和recovery两个中间件。// Default returns an Engine instance with the Logger and Recovery middleware already attached.func Default() *Engine { debugPrintWARNINGDefault() ...原创 2019-07-06 22:02:02 · 1258 阅读 · 0 评论 -
Mysql学习(一)添加一个新的用户并用golang操作Mysql
Mysql添加一个新的用户并赋予权限添加一个自己的用户到mysql首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码ailumiyana@ailumiyana:~/Git_Project/Go_Test$ sudo mysqld_safe --skip-grant-tables2019-01-07T01:35:51.559420Z mysqld_safe L...原创 2019-01-07 14:50:08 · 671 阅读 · 2 评论 -
golang实现分布式缓存笔记(一)基于http的缓存服务
文章目录golang http包简要使用介绍hello.goRedirect.gohttp-cache-server 实现cacheHandler程序测试golang http包简要使用介绍Golang自带的http包已经实现了,htpp客户端和服务端,我们可以利用它更为快速的开发http服务。本章仅介绍一下http包服务端的使用。Golang中处理 HTTP 请求主要跟两个东西相关:Ser...原创 2019-02-15 09:30:58 · 2155 阅读 · 0 评论 -
golang 开源项目
src :https://www.open-open.com/lib/view/open1396063913278.html#Networking内容目录Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑器 Enc...转载 2019-04-16 12:48:48 · 3224 阅读 · 0 评论 -
golang编译源代码和交叉编译方法
文章目录@[toc]golang编译源代码和交叉编译方法编译源代码编译go1.4编译go1.12交叉编译golang编译源代码和交叉编译方法编译源代码golang编译其实很简单,下载一份最新的源代码后,进入src目录运行all.bash即可,但是你可能会遇到下面问题,这是因为现在golang都是用go语言编译的了,所以你的系统必须先安装好 >= go1.4 的版本../all.ba...原创 2019-04-19 12:35:27 · 3955 阅读 · 0 评论 -
golang中redis对redigo的发布订阅机制的使用
文章目录golang中redis对redigo的发布订阅机制的使用订阅示例发布示例golang中redis对redigo的发布订阅机制的使用redigo 对redis的订阅机制放在pubsub.go里面,订阅主题后通过Receive()函数接收发布到订阅主题的消息。// Receive returns a pushed message as a Subscription, Message...原创 2019-04-20 14:52:43 · 4434 阅读 · 1 评论 -
go路由httprouter中的压缩字典树算法图解及c++实现
go路由httprouter中的压缩字典树算法图解及c++实现前言准备从嵌入式往go后端转,今年准备学习一下gin框架,决定先从这个轻量级的路由请求器着手,本文讲讲它用到的压缩字典树算法。httprouter简介HttpRouter是一个Go编写的轻量级的高性能Http请求路由器(也可称为多路选择器multiplexer简称mux)与Go的net/http包的默认mux不同,该路由器支持...原创 2019-05-01 11:51:22 · 2474 阅读 · 0 评论 -
gin框架源码学习笔记(一)简单解读一个hello程序
gin框架源码学习笔记(一)简单解读一个hello程序文章目录gin框架源码学习笔记(一)简单解读一个hello程序hello程序Default()EngineGET()run()小结先把源码拉下来,go get github.com/gin-gonic/gin之后本章简单解读一个hello程序.hello程序package main import ( "github.co...原创 2019-05-25 23:27:27 · 814 阅读 · 0 评论 -
红黑树原理详解及golang实现
红黑树原理详解及golang实现文章目录红黑树原理详解及golang实现二叉查找树性质红黑树性质operation红黑树的插入`情形1`:空树`情形2`:插入节点父节为黑色,`情形3` 插入节点的父节点为红色,父节点为父父节点的左孩子,父父节点的右孩子为黑色,插入节点为左孩子(或者父节点为父父节点的右孩子,父父节点的左孩子为黑色,插入节点为右孩子)。`情形4` 插入节点父节点为红色,父父节点的...原创 2019-06-02 17:49:41 · 1239 阅读 · 0 评论 -
go笔记--切片排序sort包的使用
golang切片排序sort包的使用golang的sort包提供了部分切片排序的函数和用户自定义数据集的函数。排序切片func Example1() { arry := []int{5,8,3,1,4,2,7,6} fmt.Println(arry) sort.Ints(arry) fmt.Println(arry) // Output: // [5 8 3 1 4 2 7 6...原创 2019-07-07 15:58:50 · 4451 阅读 · 0 评论 -
go笔记--容器heap包简单使用
golang 容器heap接口type Interfacetype Interface interface { sort.Interface Push(x interface{}) // 向末尾添加元素 Pop() interface{} // 从末尾删除元素}任何实现了该接口的类型都可以用于构建最小堆。最小堆可以通过heap.Init建立,数据是递增顺序或者...原创 2019-07-07 16:54:50 · 1844 阅读 · 0 评论 -
golang协程同步的几种方法
golang协程同步的几种方法本文简要介绍下go中协程的几种同步方法。协程概念简要理解协程类似线程,是一种更为轻量级的调度单位,但协程还是不同于线程的,线程是系统级实现的,常见的调度方法是时间片轮转法,如每隔10ms切换一个线程执行。协程则是应用软件级实现,它和线程的原理差不多,当一个协程调度到另一个协程时,将上一个协程的上下文信息压入堆栈,来回切换。一个线程可以跑很多个协程,由这个线程来...原创 2019-06-29 16:39:57 · 1424 阅读 · 0 评论 -
go笔记--缓冲channel简单使用
golang的缓冲channel简单使用文章目录golang的缓冲channel简单使用阻塞型非阻塞我们常用的是无缓冲channel :make(chan type)其实make() 创建chan的第二个参数可设置缓冲channel的大小。上述语句等价于 make(chan type, 1) 即创建了一个缓冲区大小为1channel下面看有缓冲channel的两个例子.阻塞型d...原创 2019-06-29 22:42:58 · 676 阅读 · 0 评论 -
rtp协议打包拆包h264数据
rtp协议打包拆包h264数据文章目录rtp协议打包拆包h264数据nalu头rtp包头rtp打拆包h264打包拆包最近也在玩直播了,会写一点流媒体和ffmpeg滤波器和编解码器API方面的文章,本文简述一下rtp打包h264和拆包h264数据的方法。nalu头H264在网络上传输的是NALU,NALU的结构是:NAL头+RBSPNAL头只有一个字节:±--------------...原创 2019-07-06 16:05:15 · 1540 阅读 · 0 评论 -
Go语言安装
Go语言安装使用教程文章目录Go语言安装使用教程Go语言简介Go语言安装HelloWolrdGo语言简介Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go 亦称为 Golang(译注:按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站...原创 2018-12-08 17:37:31 · 693 阅读 · 0 评论