Go语言中文网 为您找到相关结果 47

Golang 网络爬虫框架gocolly/colly 一

Golang 网络爬虫框架gocolly/colly 一 gocolly是用go实现的网络爬虫框架,目前在github上具有3400+星,名列go版爬虫程序榜首。gocolly快速优雅,在单核上每秒可以发起1K以上请求;以回调函数的形式提供了一组接口,可以实现任意类型的爬虫;依赖goquery库可以像jquery一样选择web元素。 gocolly的官方网站是http://go-colly.org/,提供了详细的文档和示例代码。安装colly: go get -u github.com/gocolly/colly/... 在代码中导入包: import "github.com/gocolly/colly" colly的主体是Collector对象,管理网络通信和负责在作业运行时执行附加的回掉...阅读全文

博文 2017-12-30 00:30:00 majianguo

分享 | 百度网盘高速下载方法汇总

在线免安装类1、在度盘资源分享网址“baidu”后面加上 “wp” 两个字母 这个方法之前介绍过:【工具分享】两个关于度娘的工具,非常不错!能用多久天知道,目前是最简便好用的方法。特点:免登陆,免下载安装软件2、油猴脚本+IDM这个方法第一次下载要先安装一些插件,然后用下载软件就可以实现高速下载。之前也介绍过:你还在吐槽百度网盘的下载速度吗?那就来试试这个吧【视频】百度网盘如何实现高速下载教程特点:免登陆,第一次要麻烦一些,后面就快了。 这个方法也比较好用,稳定性也还不错。关键就是要找对合适的脚本,最笨的方法就是挨个试,如果不行了就换。安装软件类1、速盘https://www.speedpan.com/speedpan-free.html 这款软件采用了Aria2多线程下载,支持免登陆网盘账...阅读全文

博文 2019-07-19 23:32:42 永恒君的百宝箱

Golang回调函数实例二则

1.定义 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 2.机制 定义一个回调函数 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者 当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理 例1.这是一个简单的回调例子,调用函数test时,调用真正的实现函数add package main import "fmt" type Callback func(x, y int) int // 提供一个接口,让外部去实现 func test(x, ...阅读全文

博文 2017-07-27 02:06:18 iCaptain

【互联网早报】2017.11.21

## 国内新闻 1. 支付宝内测版遭曝光:马上将支持用Face ID支付 http://tech.sina.com.cn/mobile/n/n/2017-11-21/doc-ifynwnty6206785.shtml 2. 360重组议案过关股东大会500亿元资产注入在即 http://tech.sina.com.cn/i/2017-11-21/doc-ifynwxum7806388.shtml 3. 华策影视讨回乐视2.48亿债权 新乐视文娱业务或盘活 http://tech.sina.com.cn/it/2017-11-21/doc-ifynwxum7806435.shtml ## 国际新闻 1. 无人驾驶货运卡车技术企业「图森...阅读全文

studygolang filter模块阅读小结

##Filter模块与Hanlder## Hanlder是一种已知类型的回调方法,由使用者提供,可以抽象出一个type func类型来接受这种方法 type HandlerFunc func(http.ResponseWriter, *http.Request) 然后给该方法添加一个方法用来在触发该方法的调用 func (f HandlerFunc) ServeHTTP(rw http.ResponseWriter, req *http.Request) { // 执行当前Route的FilterChain filterChain := CurrentRoute(req).FilterChain if filterChain != nil { ...阅读全文

Ware - 轻松创建中间件层

Ware https://github.com/futurespaceio/ware 核心功能源自[martini][1], 喝杯martini,轻松创建属于自己的中间层。 目前正在使用Ware,开发一个静态生成器[Space][2],快速、简单、插件化。 "喝杯martini,梦回太空“ 简单例子: package main import ( "log" "github.com/futurespaceio/ware" ) func main() { w := ware.New() w.Use(func(c ware.Contex...阅读全文

golang之runtime.SetFinaliz

在实际的编程中,我们都希望每个对象释放时执行一个方法,在该方法内执行一些计数、释放或特定的要求,以往都是在对象指针置nil前调用一个特定的方法,golang提供了runtime.SetFinalizer函数,当GC准备释放对象时,会回调该函数指定的方法,非常方便和有效。 参考: Go 语言中手动内存管理 go语言之初始化的构造函数 Go和C如何共享内存资...阅读全文

Golang让协程交替输出

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 之前用Golang写过一篇关于下载的文章(https://my.oschina.net/90design/blog/1607131), 最后提到:如果新需求是同时下载,并且按循序下载,最近看到在论坛里有人又再问起,就想起来更新一下此问题。 开始 两个协程交替输出1-20 package main import "fmt" func main() { A := make(c...阅读全文

博文 2018-01-19 11:33:05 90design

基于 MySQL 的 ID 生成器 idgo

idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点: * 每次通过事务批量取ID,性能较高,且不会对MySQL造成压力. * 当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险. 业界已经有利于MySQL生成ID的方案,都是通过:

REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因...阅读全文

开源项目 2015-12-24 16:00:00 flike

安装fabric hyperledger--by Skyh0625

hyperledger 是IBM的无币区块链,作为比较大联盟链项目,很多大公司都在研究,比如腾讯阿里,金融行业比如银行保险微众P2P企业等,作为杀手级应用,现在还没看很多,可能在信息存证,发票版权等项目有用上,炒区块链概念的外包公司也水涨船高,今天就重新再虚拟机上安装hyperledger(后面有精华) 1. 准备环境 首先我用的是Ubuntu18.04 LTS环境 这时就得用黑科技,通过ss方便实用,其它的就爱莫能助了 .bashrc写入 export http_proxy="http://192.168.157.1:1080" export https_proxy="http://192.168.157.1:1080" 安装go,官网推荐这样是最新版 sudo snap install ...阅读全文

博文 2019-06-26 00:32:42 skyh25

全面升级后的开源云盘不了解一下么?蓝眼云盘 2.0 发布

蓝眼云盘的 Github 地址,请随手点个 star,谢谢啦。 部分软件截图: 2018 年 1 月份的时候,蓝眼云盘 1.0 刚开发完毕,那时候一个 star 都没有。为了让自己的这个开源项目看起来像那么回事儿,我发第一篇文章, 经过一年时间的持续迭代,目前蓝眼云盘已经有了 600+的 star。 这次升级的关键词就是:更快,更人性化,更透明。更快是指后端重新梳理了架构,从而日志、异常、离线任务、配置文件等更加规范了,图片缩略图也增加了缓存功能,访问速度更快。更人性化是指增加了 UI 的安装向导,可以通过下一步,下一步的方式就配置好数据库和管理员账户。更透明是指增加了大盘监控,管理员可以非常直观的看到每天的 PV,UV 以及周环比日环比,文件占用空间等重要信息。 开源虽然不容易,但是看到大...阅读全文

博文 2019-01-08 23:34:45 李爽

golang版本的通用时间轮 Timewheel

一个通用的timewheel工具类 通用粗精度的timewheel,只启动一个timer,可监听任意多的到期时间,放入的用户数据可以是任何类型。 接口说明: 1. Start: 开始一个timewheel ; 2. SetCallback: 设置时间到期时的回调函数,回调函数中不可作过于耗时的操作,以免卡住timewheel的正常运行; 3. Add: 添加需要监控的对象,务必在Start调用后再调用此接口; 4. Stop: 停止此timewhee...阅读全文

Golang通过反射检测变量类型

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 简单的记录一下吧。 package main import ( "reflect" "fmt" "strings" ) type Foo struct { A int `tag1:"Tag1" tag2:"Second Tag"` B string } func main(){ f := Foo{A: 10, B: "Salutations"} fPtr := &f m ...阅读全文

博文 2018-01-23 10:33:06 90design

Golang全面深入系列

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 接口 1 - Golang interface接口全面理解(一) 2 - Golang interface接口全面理解(二) 并发 1 - 并发介绍 2 - Goroutine 3 - Channle 4 - 带缓冲的channle和工作池 5 - Select 6 - Mutex Defer和错误处理 1 - defer 2 - 错误处理 3 - 自定义错误 4 - p...阅读全文

博文 2018-03-13 18:33:07 90design

真相:为何技术不如你的人加薪升职比你快

经常有小伙伴在我的公众号“程序视界”后台留言,对一种现象表示不理解:为什么技术并不是多好的人,加薪升职却比自己快? 有人说,这是因为这类人会溜须拍马伺候领导。 有人说,这是因为领导眼睛瘸了,看不出谁是真正能做事的人。 有人说,这是因为此人有背景,老板都不敢得罪他。 还有人说,此人说不定已被潜规则。 然而实际上,我们可能是被两个常见的思维错误给蒙蔽了。这两个思维错误是: 以己之长,比人之短 单一维度评估竞争力 大家都是有逻辑、有思维、有见识的聪明人,只要接下来咱们简要说几句,你就能理解这两个思维错误是怎么回事儿了。然后,咱们再介绍什么是更好的职场竞争策略。 (1) 以己之长比人之短 渴望加薪升职却又无法突破瓶颈的开发者,往往会拿着自己的技术长处,跟那些已经加薪升职的同事去比较,张三这块不如我,...阅读全文

Golang并发(四)- buffered channel 和 Worker Pools

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 Buffered channel 之前我们说的channel都是不带缓冲的,无论发送和接收都会导致阻塞。 缓冲Channel的特点是:只有当发送至缓冲区存满后导致阻塞, 接受也是如此。 创建方式: ch:= make(chan Type , capacity) capacity 容量, 当capacity = 0 时, 为无缓冲channel,通常省略而已。 packag...阅读全文

高效日志库 BLog4go Go

BLog4go 是高性能日志库。创新地使用“边解析边输出”方法进行日志输出,同时支持回调函数、日志淘汰和配置文件。可以解决高并发,调用日志函数频繁的情境下,日志库造成的性能问题。 ** 快速启动: **

package main

import (
    log "github.com/YoungPioneers/blog4go"
    "fmt"
    "os"
)

// optionally set user defined hook for logging
type MyHook struct {
    som...阅读全文

Go语言事件系统

package main import "fmt" func main() { // 实例化一个角色 a := new(Actor) // 注册名为OnSkill的回调 RegisterEvent("OnSkill", a.OnEvent) // 再次在OnSkill上注册全局事件 RegisterEvent("OnSkill", GlobalEvent) // 调用事件,所有注册的同名函数都会被调用 CallEvent("OnSkill", 100) } // 声明角色的结构体 type Actor struct { } // 为角色添加一个事件处理函数 func (a *Actor) OnEvent(param interface{}) { fmt.Println("actor even...阅读全文

博文 2019-12-24 15:33:14 huang_he_87

Golang学习[函数]

函数的结构如下 func(p mytype) funcname(q int)(r,s int){return 0,0} 函数有很多特点 多值返回 Go可以返回多值 延迟代码 在defer后指定函数会在退出的时候调用 func ReadWrite() bool { file.Open("fileName") defer file.Close() //.... } 变参 func myfunc(arg ...int){ } 回调 func callback(y int,f func(int)){ f(y) ...阅读全文

博文 2015-11-26 21:00:01 jingmiaowill

GoLang回调实现,非传func参数方式

写这篇文章的初衷是因为最近被GoLang的一个低级问题搞蒙了,加上本蠢货用的还是IntelliJ的2017版本,对GoLang的错误提示非常有限,导致为了解决一个回调问题花了一个多小时。 问题呢,就是GoLang的回调了,在我的印象中GoLang实现回调和Java有那么一点区别,但是大同小异。首先如果是个简单的回调那么肯定没啥难度,传入一个struct对象就可以了,但是我想的是可以随时创建这个回调对象,在各种场合,那么就决定了这个回调对象可能是多个,所以必须是接口。 so,思路其实很清晰,回调参数使用接口就可以了,但是今天我被自己蠢到了,忘了GoLang的特性,首字母非大写是不能给外部包调用的,所以,一言难尽。 在解决问题的期间我不服气的搜了百度与google,发现搜出来的内容居然都是传入f...阅读全文

博文 2019-07-14 21:32:39 zerochl

on the go way (一)服务器并发

服务器并发的方式有很多种 1.通过多进程或者多线程的方式,现在这种模式基本上已经不用 2.epoll和IOCP回调的方式,不符合人们的习惯 3.使用协程(轻量级线程,创建、销毁的代价很小),协程在逻辑上上顺序执行 其中属于erlang和golang在协程并发方面做的比较好 package mainimport ( "fmt")func getResult(data []int, res chan int) { var sum int sum = 0 for _, v := range data { sum += v } res <- sum}func main() { var res = make(chan int) var data = []int{1, 2, 3, 4, 5, 6, 7,...阅读全文

博文 2016-03-22 11:00:06 OneDream

免费,开源的数字货币收款插件

虽然区块链蓬勃发展,但是程序员要在网站上支持数字货币收款依然非常困难。无论是比特币,还是eos都需要安装全节点软件才能比较稳定的做到查询收款服务。然而目前的区块链全节点都耗费大量硬盘空间和系统资源,仅仅为了为了数字货币收款进行投入是不划算的。 这里介绍一个收款插件。 优点: 无需依赖外部库,因为是go语言编写的。 无需外部数据库,默认数据库使用sqlite3,熟练工可以自己修改支持mysql和postgre。 开发者使用http请求就可以创建支付通道,查询支付状态。 收到支付有推送,方便编写业务代码。 无需安装复杂的比特币全节点,以太坊全节点,eos全节点就可以收款。 体积小巧 前期准备一 Mixin Messenger账户 中国大陆iOS和安卓用户前往该地址下载App并注册账户。 大陆以外...阅读全文

博文 2019-06-20 22:32:53 Mixin_Network

树莓派上编译 Go and 安装 Cow

PS:老Blog文章转移, 年代久远, 连接可能已失效. Cow 是不错的软件,相当好用,我在公司是直接把它挂到了服务器上,然后办公室的人都在用它。但是回到了家里我就无法用移动设备或者 PSP 之类的连接它了,我的电脑也不能一天 24 小时的在家中开机,碰巧这两天买了连个树莓派,上面运行的是专门定制过的 Debian Linux,我就想着是否能够使用它来运行 Cow。十分不幸的是,似乎作者的网站上并没有提供 ARM 设备的 Cow 版本,我尝试的下载了 Linux 32 位的版本,但是无法在树莓派上运行。所幸 Cow 是用 Go 语言写的,而 Go 支持 ARM,大不了自己编译 Cow。 我不知道是因为我的的问题还是因为什么奇怪的问题,树莓派的官方源里有 Golang,但是我安装之后却无法使...阅读全文

博文 2017-02-09 13:31:05 venmos

go 回调函数 & 匿名函数

package main import "fmt" // go 回调函数 func main() { /* 匿名: 没有名字 匿名对象: 匿名函数: 函数没有名字 通常只能使用一次。 定义的时候直接使用 */ fun1 := func(a, b int) int { fmt.Println("a:", a, "b:", b) return a * b } res2 := oper(1, 2, fun1) fmt.Println(res2) // 3 } func oper(m, n int, fun func(int, int) int) int { return fun(1, 2) ...阅读全文

博文 2020-06-07 16:32:43 小兵

golang之runtime.SetFinaliz

在实际的编程中,我们都希望每个对象释放时执行一个方法,在该方法内执行一些计数、释放或特定的要求,以往都是在对象指针置nil前调用一个特定的方法,golang提供了runtime.SetFinalizer函数,当GC准备释放对象时,会回调该函数指定的方法,非常方便和有效。 不过值得注意的是,指针构成的 "循环引⽤" 加上 runtime.SetFinalizer 会导致内存泄露...阅读全文

博文 2017-02-07 03:56:40 henrylee2cn

关于怎么实现type struct里的 回调函数 类型的实例

如果结构体内有一个 回调函数类型 ,那我该怎么实现这个类型的实例并打印输出值呢 ```go package main import "fmt" func main() { type PipeData struct { value int handler func(a int) int } //实现不了的部分⬇ var a PipeData fmt.Print(a.handler(2)) //实现不了的部分⬆ } ``...阅读全文

Golang GUI基础1 -- JSON格式化小工具

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 本人入门Golang的gui, 只是想做一些小的工具日常工作使用, 因为对Golang的热爱已经到了如痴如醉的地步。 开始今天的lxn/walk练习: package main import ( "encoding/json" "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) func main() {...阅读全文

博文 2018-01-09 10:33:04 90design

在非同一文件情况下,结构体中的父类取不到

比如在a.go中写一个结构体, Base{id: int, age: int} , Student{ name: String, base: Base } ,然后新建一个main函数的maig.go,实例化结构体Student的时候base取不到,如果写 stu := Student{ name: "小明", base : Base{.....}} 这样也会报错,说找不到 field base, 这是怎么回事儿,和java好不一样,新手, 求指点 ...阅读全文

beehive 源码阅读- go 语言的自动化机器

beehive Overview 看一下作者本人的注释 // Package bees is Beehive's central module system. beehive 非常有趣的在于各逻辑的解耦设计,这不仅让本身功能操作简单,也让扩展变得关注点少了很多,只需要一点学习成本就可以扩展自己的 beehive 首先解释一下 bee hive 中 的概念 bee 代表的是我们常见的 Worker 也就是说,实际的行为是由这些 小蜜蜂执行的。他们就类似于采蜜的工人,采集到了之后统一放回来处理 hive 是蜂房,也就是我们常见的 WorkerPool 不同的是,她更像一个 Facotry ,什么意思呢?她可以创建专属的 bee 。在极少的配置下,比如只需要配置上一个 token 即可。就可以生成...阅读全文

博文 2019-08-02 10:04:25 yhyddr

golang做成一个so静态库,供python调用, 我想实现golang这边网络收到数据后回调python的函数,但是总是提示不成功,相同的在c++可以成功. 高手帮我瞧瞧.

python部分如下: ``` def OnReceive(sockid, str_from_golang): print str_from_golang CCReceiveFUNC = CFUNCTYPE(None, c_int32, c_char_p) gReceiveFunc = CCReceiveFUNC(OnReceive) mydll = cdll.LoadLibrary lib = mydll("./basego.so") print gReceiveFunc lib.setCallbackFunc(gReceiveFunc) 用go的setCallbackFunc()来设置python的函数,作为回调函数 go部分: var...阅读全文

promise/future异步编程模型

文: http://labs.strava.com/blog/futures-in-golang/ promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅、清晰的方式进行异步编程 package main import ( "net/http" "io/ioutil" "fmt" ) func main() { url := "http://www.google.com" future := Future(func() (interface{}, error) { resp, err := http.Get(url) if err != nil { return nil, err } defer resp.Body.Close() retu...阅读全文

博文 2019-06-11 18:02:44 清晨的麦田

beehive 源码阅读- go 语言的自动化机器

beehive Overview 看一下作者本人的注释 // Package bees is Beehive's central module system. beehive 非常有趣的在于各逻辑的解耦设计,这不仅让本身功能操作简单,也让扩展变得关注点少了很多,只需要一点学习成本就可以扩展自己的 beehive 首先解释一下 bee hive 中 的概念 bee 代表的是我们常见的 Worker 也就是说,实际的行为是由这些 小蜜蜂执行的。他们就类似于采蜜的工人,采集到了之后统一放回来处理 hive 是蜂房,也就是我们常见的 WorkerPool 不同的是,她更像一个 Facotry ,什么意思呢?她可以创建专属的 bee 。在极少的配置下,比如只需要配置上一个 token 即可。就可以生成...阅读全文

博文 2019-08-01 13:32:38 yhyddr

golang协程池

const Max = 10000000 type GoroutinePoll struct { Queue chan func() error Total, Num int Result chan error FinishCallBack func() error } func (g *GoroutinePoll) Init(total int) { g.Total = total g.Queue = make(chan func() error, total) g.Result = make(chan error, total) } func (g *GoroutinePoll) SetFinishCallBack(f func() error) { g.FinishCallBack =...阅读全文

博文 2018-03-09 14:30:01 fwdqxl

go 开发 寻求大神帮助

go怎么实现延迟任务执行 main函数执行后 直接退出了 在main函数里面是有select{}可以实现执行完后在退出 ,但是实际项目应用中肯定不能这样做,例如执行一个每20秒执行一个任务 应该怎么做func main() { //go timer1() //timer2() for i :=1; i <10 ; i++ { task :=&Task{i+1,"a",""} task.Start() } } type Task struct { delay int key string data string } func NewTask(delay int,key ,data string) *Task { task :=&Task{ delay:delay, key:key, data:...阅读全文

博文 2018-08-02 13:46:30 lemonsds

golang 多态

//多态 package main import "fmt" type Functype func(int, int) int//定义函数类型 func Calc(a int, b int, fun Functype) int { result := fun(a, b) //回调机制 return result } func Add(a, b int) int{ return a + b } func Munic(a, b int) int { return a - b } func Mult(a, b int) int { return a * b } func main() { result := Calc(3,6, Add) fmt.Println("result = ", resul...阅读全文

博文 2020-04-06 04:32:42 小麦客

Go语言事件系统

package main import "fmt" func main() { // 实例化一个角色 a := new(Actor) // 注册名为OnSkill的回调 RegisterEvent("OnSkill", a.OnEvent) // 再次在OnSkill上注册全局事件 RegisterEvent("OnSkill", GlobalEvent) // 调用事件,所有注册的同名函数都会被调用 CallEvent("OnSkill", 100) } // 声明角色的结构体 type Actor struct { } // 为角色添加一个事件处理函数 func (a *Actor) OnEvent(param interface{}) { fmt.Println("actor even...阅读全文

博文 2019-12-23 20:33:12 huang_he_87

go 回调函数

package main import "fmt" // go 回调函数 func main() { /* 高阶函数: 根据go语言函数的数据类型的特点,可以将函数作为另一个函数的参数 fun1() fun2() 将fun1函数作为fun2函数的参数: fun2函数:高阶函数 接受一个函数作为参数的参数,叫做高阶函数 fun1函数:回调函数 作为另一个函数的参数的函数,叫回调函数 */ fmt.Printf("%T\n", add) //func(int, int) int fmt.Printf("%T\n", oper) //func(int, int, func(int, int) int) int res1 := add(1, 2) fmt.Println(res1) // 3 res...阅读全文