![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
golang
搬砖的小青年儿
搬砖无罪
展开
-
golang学习笔记-排序
前言这一段时间用到了一个对一组类型的数据排序,由于golang没有提供类似c++中set的内置数据结构,这里需要对一个slice中的元素进行排序,由浅到深学习golang中的排序。1. 基础数据类型golang提供了一个名为sort的包,里面提供了基础数据类型的排序:int,float64,string,其他的类型,比如:int32,int64,float32等并没有实现,但是只要使用者实现了sort包中Interface接口的三个函数就可以实现这些类型的排序,sort包中Interface的接口:原创 2020-12-30 20:09:46 · 457 阅读 · 0 评论 -
golang学习笔记-go test的使用
go test1 ) go test -v .\example_test.go 执行用例,-v 表示显示执行的结果,以下加v和不加v:2 ) //output原创 2020-09-14 22:43:11 · 1527 阅读 · 0 评论 -
golang学习笔记-golang调用c实现的dll接口细节(二)
各种原因需要与c或者c++打交道,之前对cgo有一点的了解,曾经了在了解的过程中记录了学习的过程。仅在使用的角度上讲,但是好多东西确实是模棱两可。一个契机,需要在go的框架下用到c++语言的sdk,顺便就记录一下cgo的学习过程,然后再给自己挖个坑,再深入了解一下cgo的机理和更加广泛的使用。本篇文章主要从主调的角度入手,介绍如何在go中使用c的代码,面对工程级的如何模块化,对于小的c代码如何在一个文件中实现;介绍如何在c中使用go的导出函数,作为c函数的回调函数使用。1. go调用c1.1 快速原创 2020-09-14 22:24:55 · 3674 阅读 · 2 评论 -
golang学习笔记-基于promethues客户端的数据统计
本文主要介绍基于promethues的go统计功能,利用promethues配合grafana进行实时数据的展示。因此promethues和promethues的测试功能是以docker的形式存在,并且以默认的方式启动docker,并不能用于实际的生产环境中。1.promethues的docker环境准备这里使用了promethues的service和exporter两部分。exporter类似一个代理,安装了exporter的机器可以将配置的需要采集的信息发送给service,service集中展示各原创 2020-08-21 20:49:15 · 1017 阅读 · 0 评论 -
golang学习笔记-调度任务
实际业务中有一种需求,需要一个时刻或者时间段需要执行某种业务。最简单的一种方式就是使用定时器来检测时间,当定时器触发事件时,获取当前的时间,判断当前时间与任务执行时间是否匹配,匹配的情况下开始执行调度任务。除此之外,在linux平台下,系统提供了定期执行任务的命令crontab。在go中有一个第三方包cron也是能够提供类似的功能,下面我们就这两个大的方面记录一下。1.定时器调度任务1.1. 匹配字符串获取当前的时间,将时间格式化成特定的格式,再通过字符串匹配的方式判断当前的时间是否是需要的时间点。如原创 2020-08-17 20:05:22 · 688 阅读 · 0 评论 -
golang学习笔记-gin中间件
简述gin中间件类似java的拦截器,通过中间件可以在处理具体的route请求时,提前做一些业务。比如用户有效性的校验,特定日志格式的打印,错误日志的打印等等。gin的中间件大致可以分为两类,全局中间件和路由中间件,下面记录gin的中间件学习过程中的一些问题。一、全局中间件1. 默认中间件全局中间件作用于所有的路由上,所有的路由请求都需要经过这些全局中间件。gin本身提供了一些基础的中间件:func BasicAuth(accounts Accounts) HandlerFuncfunc Ba原创 2020-07-28 23:34:52 · 3189 阅读 · 0 评论 -
golang学习笔记-优雅的退出golang服务2
前言前不久介绍了如何比较 优雅的退出golang服务 ,虽然能够优雅的退出,不过还是存在一些问题。比如只能捕获一些系统的信号量,但是对于服务启动的子协程的声明周期显然没有考虑到。经过一些时间的实践和阅读大佬们的代码,对如何优雅的退出golang服务再做一个简单的记录,顺带的记录一下另一个开源的性能分析工具的简单使用,就是大家耳熟能详的 go-torch ,以备不时之需。一、源码packag...原创 2020-01-10 10:19:07 · 762 阅读 · 0 评论 -
golang学习笔记-定时器相关
前言用golang已经有一段时间了,中间用到了定时器,也在实践了不少go经典的for+select模型,一直不太明白,正好最近有一个自己挖的坑——服务cpu占用率极高。初步定位了一下应该是由于定时器的使用不当导致的cpu占用率居高不下的情况。这边简单记录一下golang定时器的一些使用陷阱和正确的姿势,以需求的方式描述并分析记录。需求一:实现定时打印一句话需求二:定时打印一句话,并同时累计一...原创 2019-12-05 14:54:18 · 350 阅读 · 1 评论 -
golang学习笔记-golang调用c实现的.so接口细节
目的本篇文章主要介绍golang在调用c实现的.so时,具体的一些方式。比如值传递、参数传递、指针等等的一些使用,使用的是cgo来调用。一、动态库的实现hello.h#ifndef _CALL_H_#define _CALL_H_void hello(char *name,int len);void storeFile(char* name , int len);#endif ...原创 2019-08-19 13:38:45 · 2707 阅读 · 3 评论 -
golang学习笔记-oci8连接oracle
因为项目要求,需要在linux平台上连接oracle数据库。因为之前使用的是oci8,所以面对的问题就是oci8在centos上的移植问题。下面记录一下在centos下安装,使用oci8时遇到的一些问题。一、版本及安装包1、centos 版本:CentOS Linux release 7.6.1810 (Core)2、oci客户端版本:instantclient-basic-linux.x6...原创 2019-07-24 16:05:04 · 1667 阅读 · 2 评论 -
golang学习笔记-regexp之ip地址校验
因为需要交验ip地址的正确性,琢磨了一下ipv4地址的校验,做一个记录。校验范围:1.0.0.0~255.255.255.255func CheckIp(ip string) bool { addr := strings.Trim(ip, " ") regStr := `^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]|...原创 2019-06-28 17:08:48 · 4351 阅读 · 1 评论 -
golang学习笔记-协程详解
一、进程,线程和协程1、概念的区别进程、线程,都是由内核进行调度,有 CPU 时间片的概念,进行抢占式调度(有多种调度算法)协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,...原创 2019-06-04 13:43:07 · 431 阅读 · 0 评论 -
golang学习笔记-优雅的退出golang服务
写了一段时间的golang后台,怎么优雅的退出程序一直是一个很模糊的问题。思路还是之前的思路,各种标志和变量来回控制,虽然说是能够满足需求,但是总感觉那打开的姿势不对,下面对优雅的退出golang做一个小总结,废话不多说,直接上代码。一、代码package mainimport ( "fmt" "os" "os/signal" "sync" "syscall" "time")...原创 2019-06-03 14:26:49 · 1475 阅读 · 0 评论 -
seelog学习笔记
之前用了beego内置的日志模块 beego框架-logs模块学习笔记 ,起初的时候用的还凑活,不过随着项目中日志量的增大,慢慢的发现beego内置的日志库已经完全不能满足日常需求。最后打算使用 seelog ,但是似乎从2017年以后seelog不再有人维护。以下就简单说一下使用seelog的过程。一、seelog1、功能设置不同日志级别(trace, debug, info, warn...原创 2019-05-31 16:25:19 · 3115 阅读 · 0 评论 -
golang学习笔记-go mod的使用
1.设置go mod的GO111MODULE属性在cmd中执行set GO111MODULE=on2.给我们的项目生成.mod文件,该文件描述项目需要的依赖等进入我的项目文件夹中,只有一个文件http-server.go在该目录下执行go mod init生成.mod文件,文件名是生成的.mod文件中第一行的名称,可以为空,为空时默认和文件夹名称一致。执行go mod init tes...原创 2019-04-26 17:48:57 · 9087 阅读 · 2 评论 -
golang学习笔记-pprof性能分析2
前言golang自带非常强大的性能分析工具,它可以在Go程序的运行中以精致的细节显示所有运行时事件,今天我们就了解一下go tool trace的强大之处。一、概述go tool trace 显示了非常之多的信息,为了简单起见,我们先概括的看一下他显示了些什么,下面是我生成的所有trace目录,具体的如图上所示,我们逐个分析。二、详细1、view trace打开一个view trac...原创 2019-04-18 16:27:29 · 1209 阅读 · 0 评论 -
golang学习笔记-pprof性能分析1
前言使用pprof和Graphviz结合来分析golang程序的性能问题。1、pprofgolang官方用来做监控分析的库,一般都是pprof,我们这里使用的net/http/pprof可以做到直接看到当前web服务的状态,包括cpu,内存等的使用情况。2、GraphvizGraphviz (英文:Graph Visualization Software的缩写)是一个由AT&T实...原创 2019-04-18 14:57:24 · 1618 阅读 · 0 评论 -
golang学习笔记-查看gc
windows:在cmd命令行下:1.设置跟踪GC的临时环境变量set GOGCTRACE=1set GODEBUG=gctrace=12.将gc写入日志中 xxx.exe 2> gc.log在生成的gc跟踪日志中查看gc的过程,下面是截取的一部分gc日志:gc 1 @0.005s 0%: 0+11+0.99 ms clock, 0+0/15/0+7.9 ms cpu, ...原创 2019-04-17 16:08:27 · 3659 阅读 · 1 评论 -
golang学习笔记-ubuntu安装go环境
两种安装方式一、命令安装使用命令sudo apt-get install golang-1.9直接安装golang-1.9版本,但是经常不成功,因为golang的官方国内访问受限,推荐第二种安装方式。二、解压包安装1、安装从Go语言中文网下载需要的安装包。下载完成之后拷贝到ubuntu系统中,然后解压,我这边将go的包解压到了/目录下的go中。tar -xf go1.12.1.li...原创 2019-03-29 11:46:30 · 4000 阅读 · 2 评论 -
golang学习笔记-golang调用c实现的dll接口细节
目的本篇文章主要介绍golang在调用c实现的dll时,具体的一些方式。比如值传递、参数传递、指针等等的一些使用。一、dll的代码c实现的dll代码:hello.h#ifndef _HELLO_H_#define _HELLO_H_#include <stdio.h>#define HELLO_EXPORTS#ifdef HELLO_EXPORTS#define ...原创 2019-01-21 19:34:06 · 9662 阅读 · 3 评论 -
golang学习笔记-windows平台下环境搭建
一、准备工作必选:golang安装包:在 此处 下载可选(用于生成windows平台的dll):tdm-gcc-x64安装包:在 此处 下载golang IDE:在 此处下载,提取码:93g4二、安装和配置golang1、安装下载go1.11.windows-amd64.msi安装包来安装,安装时一直下一步,注意不要有中文路径,安装完成后我们可以使用命令来查看安装的结果。1)查看...原创 2019-01-18 14:24:16 · 1846 阅读 · 0 评论 -
golang学习笔记-生成windows平台的dll文件
目标将golang编写的包以dll的形式导出,供windows平台下的应用程序使用。环境golang:go version go1.11.4 windows/amd64 用于生成中间文件和c++库的头文件vs2015:编译windows平台上的应用程序cygwin64:编译过程中需要将go build生成的.a中间根据导出函数定义文件生成dll因为我这边是在x64的平台上,所以我这...原创 2019-01-09 15:58:07 · 12932 阅读 · 9 评论 -
golang学习笔记-基础篇(持续更新……)
1、搭建本地的文档在cmd中执行命令godoc -http=:6060即可在本地的6060端口查看文档,和访问官网一样的。如下:原创 2019-01-03 14:24:19 · 1129 阅读 · 0 评论 -
beego框架-logs模块学习笔记
前一段时间的项目中用到了beego框架下的logs模块,记录一下使用过程。logs模块官方文档一、示例1、控制台输出//控制台输出func Console() { log := logs.NewLogger() log.SetLogger(logs.AdapterConsole) //设置打印函数及行号 log.EnableFuncCallDepth(true) log.Debu...原创 2019-02-25 11:57:52 · 3133 阅读 · 4 评论