文本整合工具-基于Golang实现

之前一直使用DataGrip来导出数据库文件,但是DataGrip导出来的sql文件是一张表一个sql文件,每次还需要手动讲所有文件复制到一个文件中去极其麻烦。之前一直懒得去写工具来复制文件,最近接触了Go语言,发现Golang可以编译成一个exe可执行文件,所以想着用Golang来实现一个小程序来帮我完成这个工作顺便巩固一下我学习的东西。 本项目比较小,主要作用就是通过你配置的path路径来扫描所有符合条件前缀的文件内容全部整合到一个文件(主要用于 .sql 、 .txt 文件) 代码: package

  • 0
  • 0
  • 阅读 ( 286 )

Golang自定义排序

排序 Golang中 sort 包下提供了一些基本切片的排序 sort . Ints ( arr ) sort . Float64s ( ) sort . Strings ( ) 但是这些排序逻辑都是固定的,例如 sort.Intes() 默认就是按升序进行排序的,Golang也提供了一个接口进行自定义逻辑排序 sort.Sort() 方法,这个方法需要传入Interface类型的对象 func Sort ( data Interface ) { n := data . Len ( ) quickSort

  • 0
  • 0
  • 阅读 ( 293 )

go 协程(Goroutine)详解

什么是协程 一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程,协程的切换和创建完全是用户决定的。 进程、线程、协程对比 线程和进程是完全由操作系统的分配的,对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。 goroutine和线程的关系和区别 goroutine相对于线程: 1.Goroutine所需要的内存通常只有2kb,而线程则需要1Mb,内存消耗更少 2.由于线程创建时需要向操作系统申请资源,并且在销毁时将资源归还,因此它的创建和销毁的开销比较

  • 0
  • 0
  • 阅读 ( 394 )

go协程复用

package main import ( "fmt" "runtime" "time" ) type GoRoutine struct { gJobs chan func ( ) gDone chan struct { } gWait chan struct { } gNum int } func ( g * GoRoutine ) Wait ( ) { select { case <- g . gWait : fmt . Println ( &#3

  • 0
  • 0
  • 阅读 ( 180 )

Go 中channel/goroutine实现并发和并行

1.为什么要使用goroutine 可以让程序并发和并行的运行,增加程序运行速度 并发: 多个线程同时竞争一个位置,竞争到才可以执行,每个时间段只有一个线程在执行 并行:多个线程可以同时执行,每一个时间段,可以有多个线程同时执行。 通俗来说多线程程序在单核CPU上运行是并发,多线程程序在多核CPU上运行就是并行,如果线程数大于CPU核数,则多线程程序在多个CPU上面运行既有并行又有并发 2.Golang中的携程(goroutine)以及主线程 golang 中的主线程:在一个Golang程序的主线程上可以

  • 0
  • 0
  • 阅读 ( 326 )

Go语言协程

目录 前言 一、进程、线程、协程 1.进程 2.线程 3.协程 4.协程的优势 5.进程、线程、协程的对比 二、协程 1.协程数据结构 2.协程执行过程 3.GMP调度模型 4.调度策略 1.队列轮转 2.系统调用 3.工作量窃取 4.抢占式调度 总结 前言 最近发现go语言大火,越来越多的大厂都开始使用go语言,很多人也开启了学习Go语言,本文就介绍了Go语言中协程的基础内容以及协程的调度模型。 一、进程、线程、协程 1.进程 进程是应用程序的启动实例,是系统进行资源分配和调度的基本单位,每个进程都有独

  • 0
  • 0
  • 阅读 ( 259 )

[原创] Go/Rust/Kotlin 的协程和队列性能评测

综述 现代的异步编程中有如下的几个概念 协程 coroutine : 用户态的线程,可在某些特定的操作(如IO读取)时被挂起,以让出CPU供其他协程使用。 队列 channel: 队列用于将多个协程连接起来 调度运行时 runtime: 调度运行时管理多个协程,为协程分配计算资源(CPU),挂起、恢复协程 由于协程是非常轻量的,所以可以在一个进程中大量的创建, runtime 会实际创建系统线程(一般为恰好的物理CPU数),并将协程映射到实际的物理线程上执行,这个有时候称为 M:N模型 。好的 runti

  • 0
  • 0
  • 阅读 ( 400 )

go中的协程原理详解

文章目录 为什么要有协程? 协程的本质 协程如何在线程中执行 G-M-P调度模型 协程并发 基于信号的抢占式调度 为什么要有协程? 我们使用工厂来表示计算机,而内存空间就相当于工厂的地皮,那么我们可以认为进程就是工厂中的厂房,它占据了工厂的地皮。(进程时分配资源的最小单位) 线程是什么呢?我们继续使用这个场景来理解,线程此时就相当于工厂中的流水工作线(线程时资源调度的最小单位),每个厂房可以有多个流水线(进程可以有多个线程),流水线的存在占据了厂房的空间(线程使用系统分配给进程的内存,且同一个线程之间共享

  • 0
  • 0
  • 阅读 ( 185 )

14 Go并发编程(一):协程 —— Go并发的基本运行单元

Go协程 1.什么是goroutine? Go在语言级别原生支持并发操作,这在现代众多基于线程并发的其他语言来看是比较鹤立鸡群的。在Go中最基本的并发任务单元是一种称为goroutine的东西,我们把它叫做协程或go程,其开一个并发任务简单到令人发指,只需go关键字,就能让一个函数成为并发任务。 示例: //启动go程并发 func BaseGoroutine01() { //开辟一条协程 go func() { fmt.Println("这里是独立开辟的协程打印的!!!") }() //

  • 0
  • 0
  • 阅读 ( 214 )

golang的ping检测主机存活

Go语言的协程会并发,执行,可以大大提高效率。 列如,我们通过 ping 来检测网络的主机的话。 如果使用shell的话,会检查一个IP,在检查下一个IP,速度很慢。 如果我们使用Python 的话,可以使用多线程。 我们这里使用Go的协程来操作,速度是刚刚的。 一个网段,10S中,相当于,一秒钟处理25个左右的IP,因为ping检查,有延时性  此脚本,只能在Linux上执行 package main import ( "fmt" "os/exec" "strco

  • 0
  • 0
  • 阅读 ( 244 )

go学习之判断零值

go判断零值 第七天:go判断对象是否为零值 文章目录 go判断零值 如果一个对象与指针相关,才能用nil判断 如果一个对象与指针相关,才能用nil判断 这里与指针相关的对象包含map,slice,chan,和一些使用指针指向的对象, var arr [ ] int var m map [ int ] int var c chan int var x * message var me message var s string if arr == nil { fmt . Println ( "arr

  • 0
  • 0
  • 阅读 ( 180 )

go语言基础

go语言基础 第六天:go模块管理和面向对象实现 文章目录 go语言基础 前言 一、go模块导入 1.模块内包导入 2.模块外包导入 3.外部网址第三方sdk包导入 二、go面向对象实现 1.封装实现 2.继承实现 3.多态实现 前言 go1.11之后go默认使用go mod管理依赖包模块,模块管理主要分为三种,一种是模块内包的导入,第二种是模块外包的导入,第三种是外部网站第三方sdk导入。面向对象包含封装,继承,多态三种概念,go语言同样可以利用其语法实现面向对象。 一、go模块导入 1.模块内包导入

  • 0
  • 0
  • 阅读 ( 158 )

go语言基础之切片和map的基本使用方法

go语言生态学习 第四天:slice切片学习,map使用学习 文章目录 go语言生态学习 前言 一、切片的使用方法 1.切片初始化方法 2.追加和赋值过程 二、map学习和使用 1.初始化过程 2.增删改查 前言 go语言常用或者说能用的容器就这两个,go语言的切片是相当于Java语言的动态数组,其底层就是一个结构体,结构体保存了指向一个底层数组的指针,所以其值传递过程其实就是一个指针复制的过程,同样的map也类似一个切片,同样值传递的过程就是一个指针复制的过程。在go语言中,只有切片,map,chann

  • 0
  • 0
  • 阅读 ( 255 )

Go语言实现多态

多态是什么 相信学过Java这种面向对象语言的同学对于多态来说都不陌生,在代码执行的时候,能够根据子类的类型去执行子类当中的方法。多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值。 Go语言多态举例 有这样一个场景,我们在应用开发中涉及到很多通知事件,通知的类型可以是通过微信、QQ、Email等,那么我们可以抽象出一个接口,定义一个通知的接口,然后微信通知类、QQ通知类、Email通知类分别实现对应的通知方法。 定义一个通知类

  • 0
  • 0
  • 阅读 ( 249 )

Go语言多态如何实现

Go语言实现多态 1. 什么是多态 多态是指根据类型的具体实现采取不同行为的能力。如果某个类型实现了某个接口,那么所有使用这个接口的地方,都可以支持这种类型的值。即不同的数据类型的实体实现提供统一的接口。Go中没有 类 的概念,它的多态是靠接口来实现的。 2. 在Go中的实现 先定义一个抽象的接口,这个接口规定了结构体应当实现什么方法,比如 //定义一个eater接口,只要某个结构体实现了这个接口的全部方法,即实现了这个接口 type eater interface { eat ( ) } 定义一个通用的

  • 0
  • 0
  • 阅读 ( 293 )

Go语言多态

总结一下Go语言中多态 package main import "fmt" //申明一个函数类型 type FuncMs func(int ,int) int //加法 func Sum(x,y int) int { return x + y } //减法 func Minus(x,y int ) int{ return x-y } //noinspection ALL func Calc(x,y int , exec FuncMs) int { return exec(x,y) } fu

  • 0
  • 0
  • 阅读 ( 254 )

Golang 处理复杂格式JSON数据(多类型混合)

补充 以下内容仅做学习参考,使用请使用以下网站获取相应返回JSON结构体: JSON 转 Golang Struct 起因  在调取百度人体检测接口时,返回的JSON数据嵌套了多层,解析为 map[string]interface()类型的 数据后,在遍历取值过程中出现了一些异常,如下两个等: cannot range over person_info (type interface {}) interface conversion: interface {} is []interface {}, not

  • 0
  • 0
  • 阅读 ( 305 )

Go语言下的多态

文章节选自《Go语言实战》 多态 现在了解了接口和方法集背后的机制,最后来看一个展示接口的多态行为的例子,如代码所示。 01 // 这个示例程序使用接口展示多态行为 02 package main 03 04 import ( 05 "fmt" 06 ) 0708 // notifier 是一个定义了 09 // 通知类行为的接口 10 type notifier interface { 11 notify() 12 } 13 14 // user 在程序里定义一个用户类型 15 type

  • 0
  • 0
  • 阅读 ( 281 )

Go 多态

#### Go 多态 前面两节学习了Go 的继承,接口;那么继承和接口有什么不同呢? 下面我们一起来探讨一下: 继承的价值主要在于: 解决代码的复用性和可维护性; 接口的价值主要在于: 设计,接口设计好各种规范方法,让其它自定义类型实现这些方法 接口比继承更加灵活,继承是满足is-a 的关系,接口是满足like-a 的关系; 下面一起来学习一下多态 变量具有多种形态, 是面向对象编程的第三大特征,Go 中的多态是通过接口实现的; package main import "fmt" type

  • 0
  • 0
  • 阅读 ( 205 )

【GO】go多态

Go本身不具有多态的特性,不能够像Java、C++那样编写多态类、多态方法。但是,使用Go可以编写具有多态功能的类绑定的方法。为什么这么说呢?因为Go使用struct构建类,根据不同类调用不同的方法。下面将展示如何使用Go编写多态功能。 package main import "fmt" //实现go多态,需要实现定义接口 //认类的武器发起攻击,不同等级子弹效果不同 // IAttack 定义一个接口,注意类型是interface type IAttack interface { //

  • 0
  • 0
  • 阅读 ( 228 )