Go并发编程之传统同步—(2)条件变量

前言回顾上篇文章《Go并发编程之传统同步—(1)互斥锁》其中说到,同步最终是为了达到以下两种目的:维持共享数据一致性,并发安全控制流程管理,更好的协同工作示例程序通过使用互斥锁,达到了数据一致性目的,那么流程管理应该怎么做呢?传统同步条件变量上篇文章的示例程序,仅仅实现了累加功能,但在现实的工作场景中,需求往往不可能这么简单,现在扩展一下这个程序,给它加上累减的功能。加上了累减的示例程序,可以抽象的理解为一个固定容量的“储水池”,可以注水、排水。仅用互斥锁当水注满以后,停止注水,开始排水,当水排...阅读全文

Segmentfault 2020-10-13 13:32:34 sown

【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

【Go语言入门系列】前面的文章:【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置【Go语言入门系列】(八)Go语言是不是面向对象语言?【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口1. GOPATH目录结构在【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间GOPATH的环境变量了,并在工作空间中新建了三个目录src、pkg、bin了。那为什么要新建这三个目录呢?这三个目录又有什么作用呢?首先,不管是什么系统或项目,目录的存在肯定...阅读全文

Segmentfault 2020-10-13 11:32:33 行人观学

python读取yaml配置文件

什么是yaml 1、yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大, 2、支持多种语言:python、js、golang、java、c、c++ 3、yaml语法 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 #号表示注释 4、yaml支持的数据结构有三种: 对象:键值对的集合,又称为映射(mapping...阅读全文

简书 2020-10-10 15:32:46 小啊小狼

goroutine 及channel

本文主要介绍goroutine 和channel的使用。 基础知识介绍 goroutine 是 golang 中在语言级别实现的轻量级线程,仅仅利用 go 就能立刻起一个新线程。多线程会引入线程之间的同步问题,在 golang 中可以使用 channel 作为同步的工具。 通过 channel 可以实现两个 goroutine 之间的通信。 创建一个 channel, make(chan TYPE {, NUM}) TYPE 指的是 channel 中传输的数据类型,第二个参数是可选的,指的是 ...阅读全文

简书 2020-10-10 12:32:42 不怕天黑_0819

洗牌算法

一、 参考 知乎 有哪些算法惊艳到了你? 知乎 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例? Fisher–Yates shuffle 洗牌算法 洗牌算法具体指的是什么? 1.Fisher–Yates shuffle image.png Fisher–Yates shuffle 的原始版本,最初描述在 1938 年的 Ronald Fisher(上图) 和 Frank Yates 写的书中,书名为《Statistical tables for biological, agricult...阅读全文

简书 2020-10-10 12:32:42 合肥懒皮

Go 插件化开发

Golang 插件化开发 Golang官方提供了plugin模块,该模块可以支持插件开发. 目前很多思路都是在开发过程中支持插件话,当主体程序写完后,不能够临时绑定插件.但是本文将带领你进行主体程序自动识别并加载、控制插件调用. 代码地址: https://github.com/A-Donga/PluginTest @[toc] 基本思路 插件化开发中,一定存在一个主体程序,对其他插件进行控制、处理、调度. 具有模拟业务的主体程序 我们首先开发一个简单的业务程序,进行两种输出. 当时间秒数为奇数...阅读全文

简书 2020-10-10 11:32:55 A_Donga

为什么golang没有提供协程的实时优先级

在golang中提供了setpriority的接口,可以设置非实时的优先级,这样的优先级在100-139,但是golang没有提供类似于C库中的(或者说是linux下)sched_scheduler,用以设置实时的工作线程,也就是M的优先级。如果提供了,那么golang开发便利这一功能就可以应用到实时的场景,这相比于用C去开发要快速得多。不知道在golang开发组织中有没有这样的计划阅读全文

Go语言中文网 2020-10-10 08:54:37 fengdongsheng

Linux端口转发的几种常用方法

在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。本文总结了Linux端口转发的一些常用方法 1. SSH 端口转发 SSH 提供了一个非常有意思的功能,就是端口转发,它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。 (1) 本地端口转发 ssh -fgN -L 2222:localhost:22 localhost (2) 远程端口转发 ssh -fgN -R 2222...阅读全文

简书 2020-10-10 00:32:41 易霂

Golang标准库——flag

flag包实现了命令行参数的解析。 要求: 使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里: import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname") 如果你喜欢,也可以将flag绑定到一个变量,使用Var系列函数: var flagvar int func init() { flag.IntVar(&f...阅读全文

简书 2020-10-09 23:32:41 DevilRoshan

Golang标准库——fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。 Printing verb: 通用: %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安...阅读全文

简书 2020-10-09 23:32:41 DevilRoshan

Go 配置总结

介绍 Go 有很多配置, 可以通过环境变量指定. 也可以使用默认值. 通过 go env 命令查看默认值. GOROOT 和 GOPATH 是必须要指定的. 常用的配置 GOROOT, GOPATH 和 GOTOOLDIR GOROOT 是安装路径. 通常是 /usr/local/go. GOPATH 是下载包的存储路径. 通常是 ~/go. GOTOOLDIR 是 Go 工具的路径. 通常是 $GOROOT/bin. GO111MODULE GO111MODULE 指定是否使用 module,...阅读全文

简书 2020-10-09 23:32:41 霜序未尽

【golang小工具】目录下文件路径写入Excel并打tar包上传远程服务器

ToolTest 整体说明 最近在练习go代码,恰好工作中有一些场景需要经常去访问某个目录下所有文件,将相对路径写入Excel并上传系统,同时打包文件上传服务器。利用工作之余,练练手学习写了一个小工具,主要实现功能如下: 获取指定目录下所有文件路径信息 将获取文件相对路径信息保存至Excel文件中 将对应目录下所有文件打入tar包 将war包上传至指定的服务器路径 完整代码下载链接 代码实现 infoFromYaml.go 读取 yaml 配置文件信息,并保存在结构体变量中 导入包 import...阅读全文

简书 2020-10-09 23:32:41 云之君兮鹏

[Golang实现JVM第七篇]实现invokevirtual和虚方法表

本篇我们专注invokevirtual这一条指令,先通过简单粗暴的方式实现指令的功能,然后探究如何通过著名的虚方法表(Virtual Method Table)来进行一些优化。 指令含义 invokevirtual用于调用除静态方法、构造方法、私有方法、接口方法外的所有方法。其指令的格式为: invokevirtual = 182 (0xb6) Format: invokevirtual indexbyte1 indexbyte2 Operand Stack: ..., objectref, [...阅读全文

简书 2020-10-09 20:32:43 司青玄

macOS下搭建golang的QT开发环境

简介 环境准备 macOS Catalina 10.15.7 go v1.14.4 qt v5.13.0 therecipe/qt Xcode v12.0.1 / xcode-select --install 建议先安装 Xcode v12.0.1 / xcode-select --install,这两个安装其中一个即可。其他组件的安装相对比较容易,这里只描述下qt和therecipe/qt的安装。 GO安装 golang安装相对简单,这里要注意设置GOBIN目录 本文设置的GOBIN目录如下 ...阅读全文

简书 2020-10-09 19:32:58 tickstep

linux后台开发中避免僵尸进程的方法总结

一、什么是僵死进程?一般情况下,程序调用exit(包括_exit和_Exit,它们的区别这里不做解释),它的绝大多数内存和相关的资源已经被内核释放掉,但是在进程表中这个进程项(entry)还保留着(进程ID,退出状态,占用的资源等等),你可能会问,为什么这么麻烦,直接释放完资源不就行了吗?这是因为有时它的父进程想了解它的退出状态。在子进程退出但还未被其父进程“收尸”之前,该子进程就是僵死进程,或者僵尸进程。如果父进程先于子进程去世,那么子进程将被init进程收养,这个时候init就是这个子进程的...阅读全文

简书 2020-10-09 18:33:02 linux大本营

使用高匿爬虫代理的安全性

互联网的发达,导致网上出现的网络爬虫也越来越多,伴随着爬虫对HTTP代理的需求也多了起来。刚开始的爬虫使用HTTP代理,对代理IP都不太信任,觉得很不安全。实际上不是这种。高匿的爬虫代理的安全性特别的好。在使用中不用担心安全问题,因为使用了代理以后,服务器的本机IP是处在一种隐藏状态,对方服务器看到的是代理服务器的IP。这就是越来越多的网络爬虫使用爬虫代理,它保证了客户隐私的安全。HTTP代理类型:透明代理、普通代理、高匿代理透明代理:无法隐藏本地IP普通代理:对方服务器知道是使用了代理IP高匿...阅读全文

Go语言中文网 2020-10-09 17:44:08 laical

二叉树遍历

以前在数据结构的书上学过二叉树的遍历,老师讲了前序、中序、后序遍历三种,但是只是讲了一下概念,在纸上画一下遍历的过程,并没有讲代码的实现。 算法思想 先序遍历 前序遍历的顺序是 根节点-左子树-右子树 。意思是从根节点开始,要一直访问左子树,直到没有左孩子,然后访问右子树。 前序遍历 (图片来自知乎) 理解起来应该是很简单的,不过实现起来就不一样了,图中演示的是用递归的方式遍历的,事实上还可以用迭代来实现,也就是 DFS 和 BFS。 中序遍历 中序遍历 后序遍历 在这个算法演示 的网站上没有找...阅读全文

简书 2020-10-09 17:35:27 没有梦想的阿巧

快速排序、归并排序

快速排序在解释之前,先上一张快排的图,我发现直接看图理解算法更简单首先需要了解的是,快速排序的过程是递归调用的。步骤:先选出一个参考值,用来进行比较。这个参考值可以从待排序的数组里任选一个,一般选择第一个或者最后一个。在选出一个参考值之后,开始遍历数组,把比参考值小的放到它的左边,大于等于它的放到右边;在实现的时候就是交换位置。在实现的时候,需要维护两个指针,头指针和尾指针,如果遍历的数比参考值小,就让这个数和头指针指向的数交换位置,并且头指针向右移动一步,类似的,尾指针则是向左移动一步。代码实...阅读全文

Segmentfault 2020-10-12 19:32:33 五行缺金