June 15, 2015
golang中chan实例
"package main import \u0026#34;fmt\u0026#34; func main() { data := make(chan int) // 数据交换队列 exit := make(chan bool) // 退出通知 go func() { for d := range data { // 从队列迭代接收数据,直到 close 。 fmt.Println(d) } fmt.Println(\u0026#34;recv over.\u0026#34;) exit \u0026lt;- true // 发出退出通知。 }() data \u0026lt;- 1 // 发送数据。 data \u0026lt;- 2 data \u0026lt;- 3 close(data) // 关闭队列。 fmt.Println(\u0026#34;send over.\u0026#34;) \u0026lt;-exit // 等待退出通知。 } 输出结果:\n1 2 3 send over. recv over. 而如果将上面与 exit chan有关的三行删除掉,则结果为:"
June 13, 2015
golang中chan的理解与使用教程
"对于 chan 介绍见: https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.7.md\n这里我们主要通过实例来介绍对chan的理解及用法.\n无Buffer的Channels 实例1:\nfunc main() { ci := make(chan int) ci \u0026lt;- 4 value := \u0026lt;-ci fmt.Println(value) } 执行结果错误为:\nfatal error: all goroutines are asleep - deadlock! goroutine 1 [chan send]:\n从上面“fatal error: all goroutines are asleep - deadlock!” 这句我们可以看出是groutings 阻塞了,这里为写阻塞,从“goroutine 1 [chan send]”可以看出来。\n这一点文档里已经说明阻塞的原因了:\n默认情况下,channel接收和发送数据都是阻塞的,除非另一端已经准备好,这样就使 …"
June 13, 2015
Dev with Vagrant and Docker
"前言 为了在团队里搭建统一的本地开发环境,最近花了点时间用了下vagrant和docker,在此做个记录, 这也算一个DevOps的实践。\nVagrant介绍 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。\n我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。\n以上介绍直接抄自网络,我觉得介绍的很到位。\n「注意点:」\nvagrant up命令执行后,如果看到下面的错误信息,则需要安装另外一个工具:\n[default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can prevent …"
June 9, 2015
golang中flag包的用法
"golang中flag包主要用来CLI下,获取命令参数,示例如下mysql.go:\npackage main import ( \u0026#34;flag\u0026#34; \u0026#34;fmt\u0026#34; ) func main() { host := flag.String(\u0026#34;h\u0026#34;, \u0026#34;localhost\u0026#34;, \u0026#34;请指定一个主机\u0026#34;) user := flag.String(\u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定数据库用户\u0026#34;) port := flag.Int(\u0026#34;P\u0026#34;, 3306, \u0026#34;Port number to use for commection or 0 for default to, in port 3306\u0026#34;) //var name string //flag.StringVar(\u0026amp;name, \u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定用户名\u0026#34;) flag.Parse() //参数解析 fmt.Println(\u0026#34;主机地 …"
May 29, 2015
mac下的yum包管理工具MacPorts
"这里推荐安装 Homebrew,好像安装这个的用户比较的多的,安装命令也非常的简单。\nMac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装些软件。\n除了这个还有一些类似的工具: Homebrew 和 Fink。\nFlink是直接编译好的二进制包,MacPorts是下载所有依赖库的源代码,本地编译安装所有依赖,Homebrew是尽量查找本地依赖库,然后下载包源代码编译安装。 Flink容易出现依赖库问题,MacPorts相当于自己独立构建一套,下载和编译的东西太多太麻烦,Homebrew的方式最合理。\n下面将MacPorts的安装和使用方法记录在这里以备查。\n访问官方网站http://www.macports.org/install.php,这里提供有dmg安装和源码安装两种方式,dmg就多说了,下载 MacPorts-2.3.3-10.10-Yosemite.pkg,下一步下一步安装即可。\n通过Source安装MacPorts\nwget …"
May 24, 2015
mac终端中显示tree的命令(转)
"寻觅了良久终于找到了mac下如何在终端显示tree的命令了,作为从linux下转过来的人,还没适应mac的finder,还是喜欢在命令行下查看文件。\n命令:\nfind . -print | sed -e \u0026#39;s;[^/]*/;|____;g;s;____|; |;g\u0026#39; 然后手动alias一下,在你的.bash_profile或者.zshrc中添加:\nalias tree=\u0026#34;find . -print | sed -e \u0026#39;s;[^/]*/;|____;g;s;____|; |;g\u0026#39;\u0026#34; 搞定\n要是能显示颜色和控制层级就更好了。\nPS:也可以通过brew install tree 安装。"
May 1, 2015
ios8中action segue
"os8 action segue 有几种方法,一般选择哪一个,每种方法都有什么用,在什么环境下使用?\nApple的解释在这里: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardSegue.html 我的翻译: Show: 在master或detail区域展现内容(典型的如iPad的设置界面,左侧是master,右侧是detail),究竟是在哪个区要取决于屏幕上的内容,如果不分master/detail,就单纯的把新的内容push到当前view controller stack的顶部 Show Detail: 大致同Show,在detail区域展现内容,如果不分master/detail,新的内容取代当前view controller stack的顶部 Present Modally:模态展示内容 Present as Popover:在当前的view上出现一个小窗口来展示内容,无处不在的“选中文字后出现 复制/翻译 按钮就是这个 Custom:自定义的"
April 18, 2015
vmware11下安装mac osx 10.10教程(原创)
"推荐此方法:\n一. 安装vmware 12 pro的破解补丁(unlocker207)\nvmware 12 pro unlocker207( 204版本在vm11处可以使用,在vm12下不管用,各版本下载 http://www.insanelymac.com/forum/files/file/339-unlocker/ )\n二. 下载 Yosemite Install(14F27)_10.10.5.cdr 镜像文件。安装方法同windows一样,设置为cd/dvd就可以了。默认vmware只显示iso文件,选择一下显示所有文件即可。\n安装过程中会提示一下信息,和下面教程的错误和解决方法都一样。\n===============================================\n不在推荐使用以下这种方法,网络安装特别的慢,另外版本已经过时。推荐使用上面的方法安装!\n在安装前请检查您的硬件配置是否支持,特别注意是”虚拟化”功能,有的主板虽然支持,但默认是关闭状态的,需要在bios里开启才可以。\n所需软件:\n1.mac 补丁 unlocker 2.mac os x 10.10.3 …"
April 8, 2015
golang中的sync.WaitGroup
"Golang的sync的包有一个并发原语WaitGroup,在日常开发中比较的有用。\nWaitGroup的用途:它能够一直等到所有的goroutine执行完成,在其期间会会阻塞主线程的执行,直到所有的goroutine执行完成。\n这里要注意一下,在其中的多个goroutine 的执行结果是没有顺序的,调度器不能保证多个 goroutine 执行次序,且进程退出时不会等待它们结束。\nWaitGroup总共有三个方法:Add(delta int), Done() 和 Wait()。简单的说一下这三个方法的作用。\nAdd: 添加或者减少等待goroutine的数量\nDone: 相当于Add(-1)\nWait: 执行阻塞,直到所有的WaitGroup数量变成0\n举个例子\npackage main import ( \u0026#34;fmt\u0026#34; \u0026#34;sync\u0026#34; \u0026#34;time\u0026#34; ) func main() { var wg sync.WaitGroup for i := 0; i \u0026lt; 5; i++ { wg.Add(1) go func(n int) { defer …"
April 8, 2015
Golang语言的GOPATH与工作目录详解
"这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置、应用目录结构、编译应用等内容,需要的朋友可以参考下\nGOPATH设置\ngo 命令依赖一个重要的环境变量:$GOPATH\n(注:这个不是Go安装目录( GOROOT)。下面以笔者的工作目录为说明,请替换自己机器上的工作目录。)\n在类似 Unix 环境大概这样设置:\nexport GOPATH=/home/apple/mygo 为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。\nWindows 设置如下,新建一个环境变量名称叫做GOPATH:\nGOPATH=c:mygo GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下\n以上 $GOPATH 目录约定有三个子目录:\n1.src 存放源代码(比如:.go .c .h .s等)\n2.pkg 编译后生成的文件(比如:.a)\n3.bin 编译后生成的可执行文件( …"