一直学一直嗨,一直嗨一直学

log包在Golang语言的标准库中是怎么使用的?

01、介绍 Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger。但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等。 02、函数 Golang 的 log 包主要提供了以下几个具备输出功能的函数: func Fatal(v ...interface{}) func Fatalf(format string, v ...interface{}) func Fatalln(v ...interface{}) ...

教你如何运用python/golang实现循环链表

循环链表就是将单链表的末尾指向其头部,形成一个环。循环链表的增删操作和单链表的增删操作区别不大。只是增加时,需要考虑空链表增加第一个节点的特殊情况;删除时需考虑删除节点是头/尾节点,和链表中只有一个节点的特殊情况。 golang实现: type Node struct { value int next *Node } type Circle struct { tail *Node lenth int } // 增加节点: func (c *Circ...

golang toolkits包的使用方法介绍

在查看 open-falcon 项目源码时,经常会看到其引用了一个类库 https://github.com/toolkits ,而仔细查看该类库的作者为秦晓辉(UlricQin)— 原Open-Falcon主程,现滴滴云运维负责人 。所以有了这层关系就不难理解open-Falcon引用toolkits里很多代码的原因了吧。toolkits里根据模块类型分了多个子项目,其根据类型又分为LINUX底层性能监控的、邮件发送的、网络的等,这里以nux...

golang expect包的使用介绍

最近和业务的相关人员对接某一需求时,其提出希望能在业务服务器上不给业务人员密码信息,而能通过执行某个命令后由usera变成userb。这个需求其实用expect 就可以实现,不过使用tcl 语言编写的脚本里密码还是以明文出现的,业务是想通过安装pexpect (python)包,通过生成pyc的文件,略微增加下安全性。不过想了下,可以通过使用golang下的expect实现同样的效果,而且安全性更强。 经搜...

golang ssh包使用方法介绍

在使用gexpect包发现很多问题之外,这里又尝试使用ssh user@127.0.0.1的思路进行用户切换。这里记录下具体的使用方法,遇到的ssh: must specify HostKeyCallback 问题的解法方法及最终使用过程中的问题。 一、ssh包crypto的安装 ssh使用的包为”golang.org/x/crypto/ssh”,由于golang.org被墙了,所以这里使用github上的镜像版本,所以这里不能使用go get进行安装(不要使...

golang下处理post和get数据的方法

之前使用python进行编程的时候,最常用的就是通过post和get一个URL抓取所需的数据,之前有一个短信接口使用的python实现的(post数据到某一网关URL),但由于python源码都是公开的(pyc也很容易就反编译出来),所以准备使用golang进行重写下,这样即使让其他人调用的话,也不会泄露网关的信息和调用方式 ,刚好也借此机会总结下golang下post和get数据的方法。 一、http get请求 由于g...

如何使用 golang 写 IP地址生成器

这个是同事提的一个需求,希望能给出一个开始地址和结束地址,能打印出两者之间的所有地址。这个本来可以简单的通过shell也可以完成(满255进1),不过刚好最近在学习golang,所以就想着用golang的位运算实现下ip地址的生成。原理也比较简单,先将IP地址数字化,通过循环遍历前后两个地址中间的数值,再将该数值转化为IP就OK了。代码如下: //code from www.linuxprobe.com package...

介绍 golang json数据的处理

使用golang下的net/http模块,可以很容易的实现webserver功能。本篇就结合http模块在POST发送josn数据给webserver以及webserver在收到json数据后如何处理。 一、server端处理json数据 server端代码如下: package main import ( "net/http" "fmt" "log" "encoding/json" ) type User struct{ Id string Balance uint64 } func main() { http.HandleFunc("/", func(w http....

简单了解golang time模块

在很多种语言中都有和时间相关的模块,在python和golang中内置的模块名称都是叫time模块,只不过用法略有区别,如在python下打印当前时间是time.time,在golang下则使用的time.now(两者的输出也略有区别的,前者输的是unix time,后者输出的是常用识别的日期时间)。golang里不过还有一点比较特殊的就是其是以2006-01-02 15:04:05时间点作为基准的(简称612345或12345 2006),这点就...

介绍 golang执行系统命令

golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。 代码一 package main import ( "bytes" "fmt" "log" "os/exec" ) const ShellToUse = "bash" func Shellout(command ...

如何使用 Golang 日志监控你的应用程序?

但是你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它们过于被滥用以至于它们的作用都被忽视了。 在进一步深入之前,我们首先会介绍 Golang 日志的基础,并讨论 Golang 日志标准、元数据意义、以及最小...

Golang 修饰器编程

导读 之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式...

kubedog:解决K8S中资源跟踪问题

Kubedog 是一个开源的 Golang 项目,使用 watch 方式对 Kubernetes 资源进行跟踪,能够方便的用于日常运维和 CI/CD 过程之中,项目中除了一个 CLI 小工具之外,还提供了一组 SDK,用户可以将其中的 Watch 功能集成到自己的系统之中。安装过程非常简单,在项目网页直接下载即可。 源码地址:https://github.com/werf/kubedog.git kubedog主要使用以下三种方式进行资源跟踪: follow ro...

golang基于redis lua封装的优先级去重队列

前言: 前两天由于某几个厂商的api出问题,导致后台任务大量堆积,又因为我这边任务流系统会重试超时任务,所以导致队列中有大量的重复任务。这时候我们要临时解决两个事情,一件事情,让一些高质量的任务优先执行; 另一件事情, 要有去重。 rabbitmq不能很好的针对这类情况去重、分优先级。 这时候我又想到了我最爱的redis… 去重? list + set 就可以解决, 优先级,zset + zran...

centos 6.4安装supervisor守护golang进程

文章目录 [隐藏] 安装supervisor golang http服务 supervisor配置golang 启动supervisor supervisor运行原理 supervisor是否靠谱 最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西。supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。当然也可以用来实现golang的守护进程,下面描述下具体实...

Golang如何安全使用协程

文章目录 [隐藏] 什么是协程? 异步编程的槽点 Golang 安全正确的使用Golang协程 什么是协程? 协程(Coroutine)是在1963年由Melvin E. Conway USAF, Bedford, MA等人提出的一个概念。而且协程的概念是早于线程(Thread)提出的。但是由于协程是非抢占式的调度,无法实现公平的任务调用。也无法直接利用多核优势。因此,我们不能武断地说协程是比线程更高级的技术。 尽管,在...

Golang协程详解

文章目录 [隐藏] 一、Golang 线程和协程的区别 进程、线程 和 协程 之间概念的区别 goroutine 和协程区别 其他方面的比较 二、协程底层实现原理 三、协程的历史以及特点 异步编程的槽点 Golang 四、Golang 协程的应用 channel select 一、Golang 线程和协程的区别 备注:需要区分进程、线程(内核级线程)、协程(用户级线程)三个概念。 进程、线程 和 协程 之间概念的...

Golang方法和接口使用说明

文章目录 [隐藏] 方法 方法接收者 指针接收者 接口 定义接口 实现接口 空接口 类型细化 在编程语言中,方法和函数的概念需要搞清楚。函数指的是一个封装的代码块,我们可以直接调用它,并返回结果。而方法其实也是一种函数,只不过方法需要和某个对象绑定。Golang并没有类的概念,不过仍然有方法和接口这些概念。 方法 方法接收者 方法接收者是一个特殊参数,给函数指定...

docker运行golang应用

文章目录 [隐藏] 搭建 mysql 环境 1. 通过容器编译并运行当前目录下的 golang程序(依赖需要先下载到当前目录 vendor中) 2. 使用 Docker构建镜像,在此镜像上运行一个容器,使用该容器运行 golang程序 搭建 mysql 环境 mysql.app docker run --net=host -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=letchat -d hub.c.163.com/library/mysql:latest 1. 通过容器编译并...

Go语言简介

Go语言(或Golang)起源于2007年,并在2009年正式对外发布。Go是非常年轻的一门语言,它的主要目标是“兼具Python等动态语言的开发速度和C/C++等编译型语言的性能与安全性”。 Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分...