关于 go 的数据库连接
我正用 Go 在写一个web系统练手,请问 Go 里面一个数据库连接是一开始就初始化一个放到公共区域系统运行结束关好还是用的时候再开,然后随用随关呢?为什么呢...阅读全文
我正用 Go 在写一个web系统练手,请问 Go 里面一个数据库连接是一开始就初始化一个放到公共区域系统运行结束关好还是用的时候再开,然后随用随关呢?为什么呢...阅读全文
> 留言本实现流程: 1. 用户登录,填写留言 2. 展示留言列表 (分页查询和搜索) 3. 实现留言增删改查 ### 1. 增加留言表 ``` CREATE TABLE `leave_message` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT '0' COMMENT '来自用户表user的id', `content` text NOT NULL COMMENT '留言内容', `status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '是否展示 0 否 1是', `create_at` datetime NOT NULL COMMEN...阅读全文
之前使用pusher.com提供的商业服务器,但在我的站速度慢,消息传递有丢失情况,所以自行构架 主要实现通知功能: 1. 根据每个page的 session_id来区分连接,数组方式存放,应对当一个session打开了多个page的情形 2.json格式进行通讯,数据中指定要通知的session,该session下的所有page将收到通知,session_id至少做md5处理 package main import ( "flag" "fmt" "net/http" "code.google.com/p/go.net/websocket") var port *int = flag.Int("p", 443, "Port to listen.") //创建全局map,可以为sess_id,...阅读全文
scaffold === scaffold, generate revel project by database schema 脚手架工具, 通过定义数据表,一键生成Revel管理平台项目。 ### 特点 **通过数据表定义, 一键生成管理平台** [索引页]  [列表页]  [新增页] 时间内完成插入、删除和查找等操作。 要点: 实现Has(uint)、Add(uint)、Remove(uint)、Clear()、Copy()、String()、AddAll(…uint)、UnionWith()、IntersectWith()、DifferenceWith()、SymmetricDifference()方法。 拓展: 使用uint存储而不是uint32或uint64这样限定字长的类型。 代码实现: import ( "bytes" "fmt" ) func (s *IntSet)countBit(n ...阅读全文
reflect反射 1.使用场景 当一些类型未知,有多种类型需要统一处理时,考虑使用反射来做多种情况的统一判断处理。 反射读取数据: reflect常见类型 reflect.Int,reflect.Int8,reflect.Int16,reflect.Int32,reflect.Int64 reflect.Uint,reflect.Uint8,reflect.Uint16,reflect.Uint32,reflect.Uint64,reflect.Uintptr reflect.Bool reflect.String reflect.Chan,reflect.Func,reflect.Ptr,reflect.Slice,reflect.Map,reflect.Array,reflect.St...阅读全文
如果文件不存在就创建文件,如果存在就续写文件 package wrigeFile import ( "fmt" "github.com/golang/glog" "os" ) //注意OpenFile这个方法的第二个参数,一定要加上RDWR,可读可写的权限 func writeFile(s string) { file1, err := os.OpenFile("test.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660) if err != nil { panic(err) } defer file1.Close() if err != nil { fmt.Println(file1, err) return } glog.Infoln(s) fi...阅读全文
问题描述:实现一个程序计算并打印输入的目录下所有文件的总数和总大小(以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...阅读全文
> 本文介绍爬虫相关流程和搭建 ### 1. 项目需求 > 我们的需求分三步: 1. 从租房网站上获取到杭州市的所有区的链接和名称 2. 根据每个区的链接抓取第一页列表内容,找到房屋的链接和名称 3. 根据第2步中获取的链接,抓取对应的房屋的具体信息 ### 2. 项目流程 > step 1 从项目需求中可以分解出俩个信息 三步中均需要抓取 那么就要提供 url 三步中均需要解析 那么需要提供解析函数 func > 每一步解析到的结果我们需要暂存下来,如果含有链接需要继续抓取 这里我们抽象出两个结构体 ```go //请求结构体 type Request struct { Url string ParserFunc func(string) RequestResult } //结果解析结构体...阅读全文
问题描述:实现一个网络聊天室服务端。完成之后你将熟悉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 * ...阅读全文
一个用Go实现的快速灵活的静态页面生成工具 // A Fast and Flexible Static Site Generator built with love in GoLang. 名称 hugo 地址 Github 作者 spf13等 Brief Intro A Fast and Flexible Static Site Generator built with love in GoLang. LICENSE Apache 2.0 starts 19,204 介绍 Hugo 是一个快速灵活的静态页面生成工具。它在速度、易用性和可配置性上进行了优化。Hugo可以把一个包含内容、模板的文件夹渲染为一个完整的HTML网站。 Hugo基于Markdown文件。 Hugo可以在瞬间渲染出一个中...阅读全文
问题描述:如下的函数被并发调用时,如果有重复的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...阅读全文
问题描述 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 返回不在交集中...阅读全文
GO语言特性开发者使用编程语言的三大分类(执行速度,简易程度,开发难度)1.执行速度快、编译速度慢(编译型):C,C++2.执行速度较慢,编译速度快(解释型):JAVA,.NET3.执行速度慢,开发难度小(动态脚本):Python,PHPGO语言在三个条件做了平衡:易于开发,快速编译,高效执行1.helloworldpackage mainimport "fmt"func main { fmt.Println("hello world")}注意: 1.如果需要将程序编译成二进制程序,要将包名写成main包第一个Go程序解读: 1.package Go源文件开头必须使用package声明代码所属包,包是Go代码分发的最基本单位。若程序需要运行,则包名必须为main。 2.import impo...阅读全文
问题描述 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 返回不在交集中...阅读全文
题链接: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...阅读全文