Golang项目目录结构组织
其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序。 当然,首先要说的是环境变量$GOPATH,项目构建全靠它。这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔。 Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构。 举个例子比啥都强,目录结构如下:
其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序。 当然,首先要说的是环境变量$GOPATH,项目构建全靠它。这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔。 Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构。 举个例子比啥都强,目录结构如下:
其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序。 当然,首先要说的是环境变量GOPATH,项目构建全靠它。这么说吧,想要构建一个项目,就要将这个项目添加到GOPATH中,多个项目用";"分隔。 Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构。 举个例子比啥都强,目录结构如下:
报错是这个: 09:45:41 GdbDebugger: /usr/local/Cellar/gdb/7.11/bin/ was not found on system PATH (hint: is GDB installed?) 09:45:41 LiteDebug: Failed to start debugger 然后我环境变量是这么配的 export PATH=$PATH:/usr/local/Cellar/gdb/7.11/bin 配置文件是这样的 LITEIDE_GDB=/usr/local/Cellar/gdb/7.11/bin/ 直接gdb --version也有 GNU gdb (GDB) 7.11 Copyright (C...阅读全文
北京时间4月4日11点多,Go1.1beta版发布 最先发不出的是源码,之后陆陆续续各个平台二进制版本都放出来了 [详情](https://code.google.com/p/go/downloads/list...阅读全文
帮朋友忙去采集的,看他打开韩国网站 一个一个点开去保存看不下去了速度太慢了,原本想用PHP写的,刚好看了无闻大大的go采集,然后无耻的改了下就用了, package main import ( "fmt" "io" "io/ioutil" "log" "net/http" "os" "path" "regexp" "strings" ) type NotFoundError struct { Message string } func (e NotFoundError) Error() string { return e.Message } type RemoteError struct { Host string Err error } func (e *RemoteError) Erro...阅读全文
golang中的协程之间通信除了channel之外,对于main中派生的多个goroutine的通信问题,不知道高手是如何解决的。比如A通过goroutine并发了N个B协程,那么A和其中的某个B协程之间的通信如何实现? 多个B协程函数都是相同的,A和某个B如何标识和通信的问题,我一时想不出方法,求高手指点,谢...阅读全文
不知道是个别问题,还是代码Bug。看不见发帖和回复的时间...阅读全文
//Golang中encoding的用法 package main import ( "bytes" "encoding/binary" "encoding/hex" "encoding/xml" "fmt" "os" ) func goxml() { type Address struct { City, State string } //xml元素节点增加属性,需要重新定制结构体 type ElementWithAttr struct{ AttrOne string `xml:"attrone,attr"` AttrTwo string `xml:"attrtow,attr"` } type Person struct { XMLName xml.Name `xml:"person"` ...阅读全文
使用nsq的时候遇到这样一个问题: AddConcurrentHandlers(handler, 8)的时候,已经有多个协程处理收到的消息。然而,当其中一个handle发生阻塞时,会导致整个Consumer阻塞,runtime.GOMAXPROCS(runtime.NumCPU()) 代码调用了。下面的代码也看不出问题,请教一下为什么会发生阻塞? ``` // AddConcurrentHandlers sets the Handler for messages received by this Consumer. It // takes a second argument which indicates the number of goroutines to spawn fo...阅读全文
***好看的请"顶" 1.//golang模板里range中的if变量不起作用 模板: {{range .rooms}} {{if .Part1}}
全球数字货币市场覆盖广泛,用户群体资源主要被各大服务平台包揽,每个地区的服务平台的较大的区别,所以打造目标产品才是整个项目的有效载体,选择有特色、有优势的产品才是企业挖掘吸纳市场用户的核心关键。首先产品基本上是根据自身的资源和优势来进行选择,这不完全是站在用户的角度,也不是市场需要什么企业就做什么。在这一点上企业必须抓准自己的优势,并且有效的扩大,再考虑市场是否需要这样的产品。当下全球数字货币经济发展飞速,币圈正逐步涌现出了一些新的项目方,其中不乏一些知名项目。然而在这里我们发现数字货币行业作为金融行业,品牌建设却是一个任重而道远的过程。对于建设项目品牌的目的其实就是综合各种资源打造好产品,提高客户满意度,提高市场独有性,提高产品在市场的美誉度和知名度。在这个脱离了流量红利期的市场,品牌定...阅读全文
有没有试过,在你自助建站的时候因为设计网站模板而烦恼?因为看不上称心的网站模板而纠结?因为看上一套模板但是需要花钱而舍不得?这些问题让建站者感到头疼。那么对于模板设计师又有什么烦心的事呢?自己设计的网站模板得不到赏识;做出精致的模板没有好的市场进行出售;做出的模板放在市场上没人购买;这些揪心的问题成为了设计者的烦恼。  就在设计师正在苦恼的时候,建站宝盒模板市场先开启模板开发者的招募。无论你是不是设计师、是不是开发者、懂不懂设计、会不会专业技术都好,只要你有创意,就能零成...阅读全文
引导加载程序(Boot loader)是在计算机在加载操作系统内核之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境加载到一个适合的状态,以便为最终调用操作系统内核做好准备。通常,引导加载的程序依赖于硬件实现,早期的Linux系统常见的引导加载程序有2种,即Grub和Lilo,现如今Grub已经成为了主流(类似Windows下的boot.ini引导文件)。 引导加载程序读取grub.conf文件的配置信息,然后根据对应配置信息来启动不同的操作系统, 管理员可以从三个路径查看grub.conf的配置信息,具体如下所示: [root@oldboy boot]# cat /etc/grub.conf #<==也可读取/boot...阅读全文
文地址:http://www.cnblogs.com/wlts/archive/2013/06/01/3112004.html 从接触golang到现在满打满算两周时间,总的来说,语法够简单,不过现在可以看、可以参照的资料数量太少了。 还记得我刚开始写的第一个有点用的程序,1000多行代码吧,完全挤在一个文件里,我不知道如果把这些内容分拆到不同的文件中去,该怎样编译,网上搜了一圈,都寥寥数语,没有成体系的讲解。可能玩golang的都是大牛吧,这些东西都水到渠成,认为没有必要写出来。 后来看许式伟的《go语言编程》里提到了一点工程管理的信息,这才知道怎么去拆分,怎样编译。 想来,当初的代码是这样的: 01 package main 02 03 import( 04 ... 05 ) 06 07...阅读全文
Go 里面的接口,绝对是我入坑程序员以来觉得最坑的一个东西了。为什么说它坑,就是怎么看怎么别扭。 说明 Go 中的接口是由使用者来定义的。这和传统的 接口 有点不一样(当然我们在开发的过程中可以根据具体的情况去决定谁用接口) 看一个例子: // package mooc type Retriever struct { Contents string } func (r Retriever) Get(url string) string { return r.Contents } // package main type Retriever interface { Get(url string) string } Go 里面比较恶心的是什么呢?就是这里的接口实现,从Java过来的看到这个肯定会...阅读全文
golang sync WaitGroup 刚才看golang的sync的包,看见一个很有用的功能。就是WaitGroup。 先说说WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。 WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的作用。 Add:添加或者减少等待goroutine的数量 Done:相当于Add(-1) Wait:执行阻塞,直到所有的WaitGroup数量变成0 package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for...阅读全文
第一:不要认为停留在心灵的舒适区域内是可以原谅的。 每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义。然而相反,在工作之后,你要极力改变这一现状。否则,你会很快变成鸡尾酒会上唯一没有人理睬的对象,或是很快因为压力而内分泌失调。但是,如果你能很快打破之前学生期所处的舒适区域,比别人更快的处理好业务、人际、舆论之间的关系,那就能很快的脱颖而出。 第二:不要把“好像”,“有人会……”,“大概”,“晚些时候”,“或者”,“说不定”之类放在嘴边。尤其是和上级谈...阅读全文
01起因前几天项目交付上线,所以闲下来了。忽然想起来,自己业余接的活,有些项目已经不再运营了,所以想清理下域名解析。上去阿里云一看,总的大概有 15 个解析。这 15 个解析就意味着 15 个项目。这些项目都是我去谈的需求、写的文档、前后端开发、部署上线维护,整个项目几乎都是我一人完成的。想当初,很用心的去开发每一个项目;如今,这些项目只能一个个关闭。这真的使我很悲观:我花了那么多的时间精力,去做的事情,竟然如此的毫无意义。02我想静静回首这 8 年,做过的大小项目,应该是有个大几十个吧(除了在公司的业务,也接了不少私活)。而有时候,在与人交谈时,当对方提出想看我开发过的一些线上的项目的时候,我竟会常常语塞,除了我近期正在做的项目,其余的,我想不起来,还有什么还在线上。即使近期正在做的项目...阅读全文
按照a tour of Go 中 Crawl 例程提示,改写了 Crawl 函数,但是只能找出一条 url,想不出原因,请教大家,谢谢。 ``` package main import ( "fmt" "sync" ) type Fetcher interface { // Fetch returns the body of URL and // a slice of URLs found on that page. Fetch(url string) (body string, urls []string, err error) } // Crawl uses fetcher to recursively craw...阅读全文
golang 中的 sync 包有一个很有用的功能,就是 WaitGroup 先说说 WaitGroup 的用途:它能够一直等到所有的 goroutine 执行完成,并且阻塞主线程的执行,直到所有的 goroutine 执行完成。 WaitGroup 总共有三个方法:Add(delta int), Done(), Wait()。简单的说一下这三个方法的作用。 Add:添加或者减少等待 goroutine 的数量 Done:相当于Add(-1) Wait:执行阻塞,直到所有的WaitGroup数量变成 0 请看例子: package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := ...阅读全文