GO

go爬虫框架go-colly官方从入门到实践之官方文档翻译

go-colly如何安装 Colly 只依赖于Go 语言,Go语言安装可以通过 安装指南进行 安装Colly,windows在cmd终端/linux在shell 中输入如下命令然后回车安装Colly go get -u github.com/gocolly/colly/... 入门 入门 开始使用Colly之前确保你已经安装最新版本,更详细内容见安装指南 让我们从一些简单的例子开始 首先你需要导入... »

go语言 windows下打包程序到linux中运行(winodws下打包linux可执行程序)

1.先在main.go下打包成.exe可执行程序,测试确保代码可正确执行 //cd到main.go目录 go build //打包命令 如果打包成功则表示代码没问题,现在准备打包成linux下的程序 2.必须使用windows的cmd,不能使用powershell或者git bash 和 cmder等工具 //cd到main.go目录下 目录切换 set GOARCH=amd64 //设置目标可执... »

go语言用printf打印 Go 结构体(struct)信息:fmt.Printf(“%+v”, 结构变量名)

用printf打印 Go 结构体(struct)信息对应实现代码 package main import "fmt" // 用户 type User struct {     Id   int     Name string     Age  int } func main() {     user := User{Id:2, Name:"golang"}     // 打印 结构体     fm... »

golang并发编程的实现

go main函数的执行本身就是一个协程,当使用go关键字的时候,就会创建一个新的协程 channel channel 管道,用于在多个协程之间传递信号 无缓存管道 当对无缓冲通道写的时候,会一直阻塞等到某个协程对这个缓冲通道读 阻塞场景: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 综上,无缓存通道的读写必须同时存在,且读写分别在两个不同的协程 func main(... »

详解如何在Go项目中输出版本信息

我们经常在使用CLI工具的时候,都会有这样的参数输出: ➜ ~ docker version Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/A... »

GO常见的错误99%程序员会遇到(解决方法)

新学习go语言的人可能遇到常见的错误,其中有两个比较常见的错误,需要单独拿出来说下,为什么要单独说呢,因为这两个错误跟其他语言不同,是因为go本身的设计造成的。 在循环(迭代)中使用了变量的引用 在go语言中,循环(迭代)所使用的变量是同一个变量,只是在每次循环的时候被赋于不同的值,这样的做的目的呢,当然是出于高效考虑咯。但是,如果使用不当的话,可能会引起意想不到的行为。 举一个栗子: func ... »

golang通过context控制并发的应用场景实现

golang 里出现多 goroutine 的场景很常见, 最常用的两种方式就是 WaitGroup 和 Context, 今天我们了解一下 Context 的应用场景 使用场景 场景一: 多goroutine执行超时通知 并发执行的业务中最常见的就是有协程执行超时, 如果不做超时处理就会出现一个僵尸进程, 这累计的多了就会有一阵手忙脚乱了, 所以我们要在源头上就避免它们 看下面这个示例: pac... »

Go处理PDF的实现代码

工作中经常会遇到一些pdf文件处理的问题,一千种pdf有一千种处理方式,每次都是绞尽脑汁和这些pdf战斗到底。 本人又是一个gopher,所以这篇文章会以一个goper的视角,列举一下我所经历过的每一种pdf处理场景,比如: pdf渲染 pdf校验 pdf加水印 pdf获取页数 pdf合并 pdf拆分 修复受损pdf pdf转png 识别pdf中的字体 pdf解密 … 本文大多是场景问... »

自己动手用Golang实现约瑟夫环算法的示例

自己动手用Golang实现约瑟夫环算法的示例

继上一篇单向链表,单线链表可以进一步扩展为环,如下图所示: 特点: 1、第一个节点称为头部节点,最后一个节点称为尾部节点 2、每个节点都单方面的指向下一个节点 3、尾部节点下一个节点指向头部节点 题目: 17世纪的法国数学家加斯帕讲了这样一个故事: 15个教徒和15 个非教徒,在深海海上遇险,必须将一半的人投入海海中,其余的人才能幸免于难,于是想了一个办法: 30个人围成一圆圈,从第一个人开始依次... »

Golang中生成随机字符串并复制到粘贴板的方法

前段时间在生活中偶尔需要对某些文件进行重命名,而且是随机名字,刚 开始是手动重命名然后在键盘上胡乱打一些字母数字,时间长了发现也挺麻烦的,于是想到能不能用golang实现这个功能并且自动把生成的字符串 复制到粘贴板,然后生成exe文件,要用的是直接鼠标双击就行。说干就干。 网上搜了些相关资料,于是写了出来。 安装必要的库 go get github.com/atotto/clipboard 代码实... »

Go使用defer函数要注意的几个点

Go使用defer函数要注意的几个点

概述 defer 函数大家肯定都用过,它在声明时不会立刻去执行,而是在函数 return 后去执行的。 它的主要应用场景有异常处理、记录日志、清理数据、释放资源 等等。 这篇文章不是分享 defer 的应用场景,而是分享使用 defer 需要注意的点。 咱们先从一道题开始,一起来感受下 … func calc(index string, a, b int) int { ret := a... »

用go写的五子棋预测算法的实现

详细请看 Github:https://github.com/shanhuijie/GoWatch/tree/master/fiveinarow five in a row (五子棋成功预测) 从横、纵、 左斜升、 左斜降 四个角度判断 const( matrix = 50*50 point = 3 ) type Coordinat struct{ x int y int } type Allin... »

详解golang中发送http请求的几种常见情况

方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:client.Do(request) -> 处理返回结果,每一步的过程都可以设置一些具体的参数,下面是一个最朴素最基本的例子: //question ???将stdout重定向为response信息??? packag... »

Go 验证字符串中是否包含中文(推荐)

发现一个验证字符串是否包含中文滴时候,一个比正则更好使滴方法,而且是golang 自带滴验证。 不需要自己写正则验证,代码如下: package main import ( "fmt" "regexp" "unicode" ) func main() { s1 := "我是中国人hello word!,2020 street 188#" var count int for _, v := rang... »

浅谈go中defer的一个隐藏功能

在开始使用Go进行编码时,Defer是要关注的一个很重要的特性。它非常简单:在任何函数中,给其他函数的调用加上前缀 defer以确保该函数在外部函数退出之前立即执行,即使外部函数出现异常被中断,该延迟函数也将运行。 但是,你还可以使用defer在任何函数开始后和结束前执行配对的代码。这个隐藏的功能在网上的教程和书籍中很少提到。要使用此功能,需要创建一个函数并使它本身返回另一个函数,返回的函数将作为... »

Go unsafe 包的使用详解

unsafe包 golang是一种静态的强类型的语言,所有的类型都是不能随意转换的,Go语言是不允许两个指针类型进行转换的。go官方是不推荐使用unsafe的操作因为它是不安全的,它绕过了golang的内存安全原则,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。但是在很多地方却是很实用。在一些go底层的包中unsafe包被很频繁的使用。 unsafe 定义 package unsafe... »

分享6个Go处理字符串的技巧小结

如果你从 Ruby 或者 Python 转型到 Go,将会有很多语言差异需要学习,其中很多问题都是围绕处理 string 类型。 下面是一些字符串的技巧,这些技巧解决了我在使用 Golang 的最初几周中遇到的问题。 1. 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 (“) 。 str := `This is a multiline string.` 注... »

学习使用Go反射的用法示例

什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) }   但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件... »

golang切片内存应用技巧详解

在 Go 语言中切片是使用非常频繁的一种聚合类型,它代表变长的序列,底层引用一个数组对象。一个切片由三个部分构成:指针、长度和容量。指针指向该切片自己第一个元素对应的底层数组元素的内存地址。 切片的类型声明如下: type slice struct { array unsafe.Pointer len int cap int }   多个切片之间可以共享底层数组的数据,并且引用的数组区间... »

Go语言Telnet回音服务器的实现

本文介绍了Go语言Telnet回音服务器,分享给大家,具体如下: package main import ( “fmt” “net” “bufio” “strings” “os” ) func main() { // 创建一个程序结束码的通道 exitChan := make(c... »

详解go语言 make(chan int, 1) 和 make (chan int) 的区别

遇到golang channel 的一个问题:发现go 协程读取channel 数据 并没有按照预期进行协作执行。 经过查资料: 使用channel 操作不当导致,channel分 有缓冲区 和 无缓冲区 , 以下是两者的区别。 无缓冲区channel 用make(chan int) 创建的chan, 是无缓冲区的, send 数据到chan 时,在没有协程取出数据的情况下, 会阻塞当前协程的运行... »

golang 使用 viper 读取自定义配置文件

viper 支持 Yaml、Json、 TOML、HCL 等格式,读取非常的方便。 viper 官网有案例:https://github.com/spf13/viper go get github.com/spf13/viper 创建 config.yaml 文件 database: driver: mysql host: 127.0.0.1 port: 3306 username: blog d... »

Go语言同步与异步执行多个任务封装详解(Runner和RunnerAsync)

前言 同步适合多个连续执行的,每一步的执行依赖于上一步操作,异步执行则和任务执行顺序无关(如从10个站点抓取数据) 同步执行类RunnerAsync 支持返回超时检测,系统中断检测 错误常量定义 //超时错误 var ErrTimeout = errors.New("received timeout") //操作系统系统中断错误 var ErrInterrupt = errors.New("rec... »

用Go+Vue.js快速搭建一个Web应用(初级demo)

Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式。本文给大家介绍用Go+Vue.js快速搭建一个Web应用(初级demo)。 环境准备: 1. 安装go语言,配置go开发环境; 2. 安装node.js以及npm环境; Gin的使用: 为了快速搭建后端应用,采用了Gin作为Web框架。Gin是用Golang实现的一种Web框架,api非常友好,且拥有出色的路由性能和... »

Golang中Set类型的实现方法示例详解

前言 本篇主要给大家讲述了如何利用Go语言的语法特性实现Set类型的数据结构,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。 需求 对于Set类型的数据结构,其实本质上跟List没什么多大的区别。无非是Set不能含有重复的Item的特性,Set有初始化、Add、Clear、Remove、Contains等操作。接下来看具体的实现方式分析吧。 实现 仍然按照已有的编程经验来联想如何实现... »

Page 1 of 34123»