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

golang练手小项目系列(3)-并发读取文件夹信息

问题描述:实现一个程序计算并打印输入的目录下所有文件的总数和总大小(以GB计算)。完成之后你将熟悉select、WaitGroup、ioutil的用法。要点:并发读取文件(夹)信息。限制开启的goroutines的最大数量。运行时每隔500ms打印当前已经统计的文件数和总大小(使用命令行参数指定此功能是否启用)。拓展:在执行中在有外部输入时退出程序。实现:import ( "flag" "fmt" "io/ioutil" "os" "path/filepath" "sync" "time")var verbose = flag.Bool("v", false, "show verbose progress messages")var sema = make(chan struct{}, 50...阅读全文

博文 2019-06-29 01:32:42 李说的对

手摸手教你用go写爬虫之三(单任务版爬虫1.0)

> 本文介绍爬虫相关流程和搭建 ### 1. 项目需求 > 我们的需求分三步: 1. 从租房网站上获取到杭州市的所有区的链接和名称 2. 根据每个区的链接抓取第一页列表内容,找到房屋的链接和名称 3. 根据第2步中获取的链接,抓取对应的房屋的具体信息 ### 2. 项目流程 > step 1 从项目需求中可以分解出俩个信息 三步中均需要抓取 那么就要提供 url 三步中均需要解析 那么需要提供解析函数 func > 每一步解析到的结果我们需要暂存下来,如果含有链接需要继续抓取 这里我们抽象出两个结构体 ```go //请求结构体 type Request struct { Url string ParserFunc func(string) RequestResult } //结果解析结构体...阅读全文

博文 2019-02-20 20:13:19 wujiangwei

golang练手小项目系列(4)-网络聊天室

问题描述:实现一个网络聊天室服务端。完成之后你将熟悉select、net库、time定时器的用法。要点:用户发来的消息广播给所有接入聊天室的用户。新用户进入的时候能收到聊天室所有其他用户的名字列表。使用netcat工具作为客户端。拓展:当用户不活跃的时间超过指定时间后,断开用户的连接。代码:import ( "bufio" "fmt" "log" "net" "time")type client struct { Out chan<- string Name string}var ( entering = make(chan client) leaving = make(chan client) messages = make(chan string))var timeout = 10 * ...阅读全文

博文 2019-06-29 01:32:42 李说的对

golang练手小项目系列(5)-并发无阻塞缓存

问题描述:如下的函数被并发调用时,如果有重复的URL(在一个routine中被多次访问或多个routine访问同一个url),会产生冗余的网络请求。请实现一个并发安全的缓存,以提高网络的利用效率和降低函数的执行时间。完成后你将熟悉互斥锁的使用。func httpGetBody(url string)(interface{},error){ resp,err:=http.Get(url) if err!=nil{ return nil,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body)}要点:注意多个routine同时访问同一个URL时只需要发出一个网络请求。拓展:代码实现1:import ( "sync")type r...阅读全文

博文 2019-06-29 01:32:41 李说的对

golang练手小项目系列(6)-使用map实现set

问题描述 go没有提供set数据结构,请用map实现set 要点 需要支持方法: Add 添加元素 Remove 删除元素 Cardinality 获取 Set 长度 Clear 清空 Set Contains 检测元素是否在 Set 中 Pop() 随机删除一个元素并返回被删除的元素 ToSlice() []interface{} 转换成slice返回 拓展 Clone 复制 Set Difference(other Set) Set 返回和另一个Set的差集 Equal(other Set) bool 判断和另一个Set是否相等 Intersect(other Set) Set 返回和另一个Set的交集 SymmetricDifference(other Set) Set 返回不在交集中...阅读全文

博文 2019-07-02 14:02:59 李说的对

golang练手小项目系列(6)-使用map实现set

问题描述 go没有提供set数据结构,请用map实现set 要点 需要支持方法: Add 添加元素 Remove 删除元素 Cardinality 获取 Set 长度 Clear 清空 Set Contains 检测元素是否在 Set 中 Pop() 随机删除一个元素并返回被删除的元素 ToSlice() []interface{} 转换成slice返回 拓展 Clone 复制 Set Difference(other Set) Set 返回和另一个Set的差集 Equal(other Set) bool 判断和另一个Set是否相等 Intersect(other Set) Set 返回和另一个Set的交集 SymmetricDifference(other Set) Set 返回不在交集中...阅读全文

博文 2019-07-02 12:03:03 李说的对

LeetCode - 160. Intersection of Two Linked Lists

题链接:https://leetcode.com/problems/intersection-of-two-linked-lists/ 简单题拿golang练练手。 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func getIntersectionNode(headA, headB *ListNode) *ListNode { la := getLen(headA) lb := getLen(headB) if(la > lb) { headA = skipNodes(la - lb, headA) } else if (lb > la...阅读全文

博文 2020-03-08 17:32:42 码农老姜