It’s often practical to see what packages your app is importing. Unfortunately there isn’t a simple way to do that, however it is doable via the go list tool and using templates.
Go to your app and run the following.
$ go list -f '{{join .Deps "\n"}}' | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'
Here is an example with the clirescue refactoring example:
$ cd $GOPATH/src/github.com/GoBootcamp/clirescue
$ go list -f '{{join .Deps "\n"}}' | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'
github.com/GoBootcamp/clirescue/cmdutil
github.com/GoBootcamp/clirescue/trackerapi
github.com/GoBootcamp/clirescue/user
github.com/codegangsta/cli
If you want the list to also contain standard packages, edit the template and use:
$ go list -f '{{join .Deps "\n"}}' | xargs go list -f '{{.ImportPath}}'
Notation
The syntax is specified using Extended Backus-Naur Form (EBNF):
Production = production_name "=" [ Expression ] "." .
Expression = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term = production_name | token [ "…" token ] | Group | Option | Repetition .
Group = "(" Expression ")" .
Option = "[" Expression "]" .
Repetition = "{" Expression "}" .
Productions are expressions constructed from terms and the following operators, in increasing precedence:
| alternation
() grouping
[] option (0 or 1 times)
{} repetition (0 to n times)
Lower-case production names are used to identify lexical tokens. Non-terminals are in CamelCase. Lexical tokens are enclosed in double quotes "" or back quotes ``.
Make 可以简化编译过程,如果有一个近百个源文件的项目,如果有个文件更改后工程需要重新编译,那么一直用gcc -c a.c这些个命令敲来敲去会屎人的。运行make时候,他会寻找指定目录下(默认是 .)的 Makefile 文件并且分析依赖关系进行必要的编译。
Makefile文件的基本格式很简单:
目标文件: 依赖文件1 依赖文件2 依赖文件3 。。。。
[tab]编译命令
他的意思是目标文件是依赖于冒号后面几个文件的,如果这些依赖文件有更新的,那么其目标文件也需要更新。
Makefile 中可能有很多以上条目,他们共同组成了一个有向无回路图(DAG图),这样可以传递依赖。make 命令会把 Makefile 文件的第一个目标文件作为默认目标,当执行 make 命令时,make 会考察这个目标文件的依赖关系,进行编译。也可以指定,比如这个 Makefile:
main: a.o b.o
[tab]gcc -o main a.o b.o
a.o : a.c c.h
[tab]gcc -c a.c -o a.o
b.o: b.c c.h
[tab]gcc -c b.c -o b.o
// [tab]的意思是这里用tab字符代替,不能有其他的什么字符
在命令行里执行make,分析关系并生成main,如果是make a.o那么他只会编译到 a.o 。
Valve 虽然从来是『有再一再二,没有再三再四』,但是不得不承认,无论是半条命还是 steam,都称得上『划时代』。
名不见经传的英雄 Unlikely Heroes
1996年,微软已经从一个小作坊成长为世界上最富有的公司之一,最早的一批员工都已经成为了百万富翁。其中两名老员工一直爱玩游戏,现在有了足够的资金做自己想做的事情,他们决定成立自己的公司。
不幸的是,他们对游戏开发毫无经验,只参与过操作系统以及功能性产品的编写,后来一个好友将他们介绍给了著名的id软件创始人——约翰·卡马克,卡马克说服他们应该拿到Quake引擎的许可并做一个游戏。他们同意了,并认为追寻梦想的时机已到。
加布·纽维尔和麦克·哈灵顿为新公司想了几个名字,包括果蝇、全息盒子以及犀牛疤痕(Rhino Scar),但最后他们选定了一个很简单的名字阀门(VALVE)。
和卡马克见面后,纽维尔和哈灵顿创建了他们的公司,并在纽维尔的婚礼遮天正式注册成立。
【G胖 加布·纽维尔 Valve创始人】:我最初建立一家游戏公司的动机带有一定社会性,我很享受与一帮聪明人一起工作,创造能影响不同群体的游戏。1996年,我在想有哪些选择,在这个问题上我又很大的自由,环游世界,度个假什么的。我最喜欢Valve的一点就是这种特定的工作环境。
不同于Bungie仅靠一人慢慢白手起家,Valve想立马就开始制作高预算游戏,两个人是远远不够的,尤其这两人还从来没做过游戏。于是Valve便开始物色人才,他们的做法不同于当时业界的标准,不仅招募专业人士,还有MOD作者。他们意识到某些mod作者可能比专业人士更有天赋。伺候Valve便开始开辟新的疆土。
公司完全依靠两位创始人的资金运作,这样一来公司便承担得起一般小工作室承受不了的风险。然而仅有两个想追梦的人还远远不够,没有人看好他们,找到一个愿意发行他们作品的发行商几乎不可能。尤其当纽维尔和哈灵顿宣称游戏采用了极其复杂的技术时,发行商们不相信他们能兑现诺言,最后他们找上了“雪乐山在线”(SIERRA Online),雪乐山刚好打算发行一款3D动作游戏,最好使用Quake引擎制作。Valve团队令他们印象深刻,有了足够的信心与其展开合作,即使失败了,仅仅一款游戏的合约也让雪乐山有退路。
一个公司能够成为欧美 RPG 玩家心目中『经典』的代言,不得不说是有两把刷子的。
启程 Setting Out
1995年,电子游戏已经不再只是孩子的玩具,即使是医生也可能成为玩家。就在这一年,三名医学院毕业生决定在投身医药行业之前做出自己的游戏。就是这样, Ray Muzyka, Greg Zeschuk和Augustine Yip在Zeschuk的地下室创建了自己的公司。谁能想到这样一个组合最后能成为RPG巨匠?他们的名字代表着精品——Bioware.
公司制作的第一款游戏叫做《超钢战神》,这是1996年的一款为MS-DOS平台执着的第一人称载具射击游戏。Bioware尝试提升游戏画面表现,将可变形地表作为一大卖点。游戏还有着复杂的背景故事,在那个年代多数射击游戏内容都只是枪枪枪,这种级别的游戏内涵着实不平常,这也成为了公司以后的立足之本。
《超钢战神》之后Muzyka和Zeschuk想要继续制作游戏,但作为创业伙伴的Augustine Yip决定投身医药行业,离开了公司。尽管如此Bioware还是继续制作了他们的下一款游戏《战场:无垠》并且开始寻找发行商。当interplay旗下的黑岛工作室看过游戏之后,他们并不想仅仅发行游戏,而是想将其打造为公司的标志品牌,并授权Bioware将《战场》做成一款官方D&D规则游戏,结果就是1998年的《博德之门》。
故事发生在AD&D第二版规则设定的“遗忘之地”,游戏保有一切RPG的特性,从移动、攻击到施法,一切结果都是通过计算获得的。Bioware明智地决定让这一过程对玩家不可见,如此一来,即便是从未看过AD&D规则书的玩家也能很快上手,投身进“遗忘之地”之中。游戏是实时进行的,这在D&D电子游戏里尚属首例,玩家可以在战斗开始前按下“暂停”,选择每个队友的进攻路线,再继续游戏观看战略实施。游戏还拥有当时的顶尖画质,充分利用了PC业界的新技术——专用独立显卡。不同于《暗黑破坏神》的杀杀杀&刷刷刷,《博德之门》将重心放在了剧情上,引人入胜的史诗般任务至少花费数十小时,一个法师学徒为其师父报仇的故事都能谋杀玩家的大量时间。支线任务大多也和主线一样有趣,D&D饭也能遇到很多设定中的著名角色并与之互动,对很多玩家来说是梦想成真。虽然画面在今天看来已经过时,但时至今日博德之门依旧是游戏史上剧情最佳的游戏之一。这还没完,游戏提供了多人模式,允许好友组队一起完成任务。这是首款能这么做的PC RPG,这使得游戏大受欢迎,因为核心玩家能在游戏中一路帮助他缺乏经验的朋友。所有这一切成就了1998年最卖座的游戏之一,成为一代RPG名作。
仅仅成立3年并推出两部作品,Bioware从医生的爱好成为了业界领导者,这一切都来得太快,没人知道他们能否将这股劲头保持下去。幸运的是,Bioware的成功之路才刚刚开始。
Interplay 对于新玩家而言已经过于陌生了,虽然早已不复往昔,但是给游戏业界留下的财富,仍旧不可估量。
新星崛起 Meteoric Rise
布莱恩·法戈的高中生涯都在 Apple II 游戏的陪伴下度过,毕业后他想到,如果自己去设计游戏,做出来的作品搞不好比手头这些都好玩。于是1992年他以Saber 软件公司的名义制作了《恶魔熔炉》,当时孤立一人的他,花费了整整一半的预算,在电脑杂志《Softtalk》上刊登了一则广告。之后为了吸引零售商进货,他又冒充普通玩家打电话给商店,询问能否买到杂志上宣传的这款酷毙了的新游戏。
计谋奏效了,零售商们也开始从 Saber 软件公司订购这款游戏,他们完全没有想到的是:所谓 Saber 实际上是一人企业,而他就是冒名电话背后的始作俑者。凭着这款游戏,法戈得到了 Boom 集团的关注,后一年他被吸收到该集团为他们工作,然而,当 Boom 的一次董事会以大打出手作结时,法戈意识到是该另立门户了。于是他召集死党,在1983年城里了自己的公司。
当时的他们对未来毫无头绪,然而他们没有料想到,公司将要经历的一系列大起大落是如此充满戏剧性,在整个游戏史上也属罕见。这家公司从小工作室起家,发展成为一流发行商,最后却不幸破产。当年也全亏他们慧眼识英雄,才扶持了暴雪、Bioware 和 Treyarch 这些如今行业的巨头。且听我以吟游诗人的曲调,将 Interplay 娱乐公司的这段兴衰史娓娓道来。
起初的 Interplay 并没有什么大作为,仅仅从事一些现有游戏的跨平台移植工作,甚至还从一家军事分包商处接活。最后他们终于同Activision达成协议,从事原创游戏开发。1984年他们的首部作品,冒险游戏《Mindshadow》问世,该作一定程度上基于罗伯特·卢德伦的小说《谍影重重》。在游戏中失忆的主角必须收集线索,找回自己不为人知的过去。游戏获得了一定的成功,Interplay 在原创游戏开发方面也借此迈出了一步。仅一年后,Interplay 出品了第一款真正意义上的大作《遗忘故事第一张:吟游诗人传奇》(冰城传奇),这款角色扮演游戏大量借鉴了《巫术》系列,而后者在病危获得官方授权的情况下,完美地运用了龙与地下城(DND)的规则体系。相比之下《吟游诗人传奇》要精致的多:多色彩,游戏音效和背景音乐的加入,使得 DND 式的冒险历程更为引人入胜。
暴雪的大名已如雷贯耳,虽然现在也面临着一些困难,但是回顾往昔,光芒依旧耀眼。
1
就读于加州大学洛杉矶分校的迈克·默汉曾经对同学这样恶作剧:当艾伦·艾德涵暂时离开电脑时,默汉迅速把艾伦的电脑密码改成了 JOE,毫不知情的艾伦回来输入密码,竟然成功登陆了。这时轮到默汉大吃一惊,艾德涵究竟是怎么做到的?于是他招认了自己的恶作剧,然后请教艾德涵是如何破解的,然而,后者的惊讶程度丝毫不亚于默汉,他不过是输入了自己的密码而已。默汉终于明白了其中关键:由于机缘巧合,艾德涵自己的密码也刚好是 JOE。此后两人成为挚友,他们关系之好,最终又成为商业上的合作伙伴,之后20年中他们的工作室制作了数十款精品游戏,不仅成为游戏史上最伟大的传奇之一,更晋升为行业巨头,屹立于整个娱乐产业。他们的公司如此受欢迎,甚至拥有自己的年度大会。且不论两人是否还把 JOE 作为密码,在产品制作的完美程度和持续的卓越方面,世界上几乎少有同行能够同暴雪娱乐并驾齐驱,这是毋庸置疑的。
毕业之际,艾伦·艾德涵觉得这是实现理想的最佳时机,他热衷玩游戏,为何不以制作游戏为业呢?但是他不甘心在大公司当低级程序员,而是想自己当老板,自己决定工作计划。艾德涵决定创立自己的公司,于是他联系迈克·默汉,邀请他入伙,同时还联系了另外一名同学弗兰克·皮尔斯。
【弗兰克·皮尔斯】我与艾伦通过熟人认识,当时很凑巧,因为我确实很想制作游戏,觉得是一项很酷的事业,却苦于不知道如何着手,而艾伦对于自己想做的事情有着明确计划和确切的愿景,他想做的事刚好也是我感兴趣的,因为我少走了很多弯路,我们能够相遇是很幸运的。
【迈克·默汉】公司成立的第一天我才和弗兰克首次见面,当时我正在说话,一个陌生人出现了,于是我闭住了嘴,然后就这么结识了。
1991年2月8日,三人在加州科斯塔梅萨建立了他们的工作室『硅与神经键Silicon&Synapse』,艾德涵担任总裁,默汉担任副总裁,皮尔斯则是程序员。他们决心不紧要制作出伟大的游戏,更要在其过程中享受到乐趣。
很多年前,一个昭阳四射的清晨,书生坐在树桩上苦读四书五经。书生一贫如洗三餐不饱,家里唯一值钱的就是那两担沉甸甸的书。
书生每天都坐在这片林子里,随便寻个坐处,读到天黑,日子一天天的就这样在圣贤书中流逝。
这日黄昏,书生正在读书,读到夕阳遍地时高呼:“书中自有黄金屋,书中自有颜如玉”,突地“吱吱”而鸣声随风而来,书生抬起头来,只见一团白影扑面而至,那是一只晶莹通白的小狐狸,雪白得一尘不染,两只眼珠溜溜而动,口里哀声连连。
说也来怪,小狐狸奔到书生面前时,竟兀自停住脚步,气喘吁吁。
书生一把抓住小狐狸,只见小狐狸雪白的后腿上,斜斜地插着一支箭,鲜血顺着箭头沽沽而下,染红了一片。小狐哀鸣几声,双目对着书生,写满了哀怜与乞求。
书生叹一口气:“小狐狸啊小狐狸,是谁忍心伤你这么深……”
语音未落,远处蹄声如雷阵阵踏来,小狐狸白溜的身子不停的颤抖,仿佛要从书生手里挣扎逃走,书生急忙捧紧小狐,一咬牙将箭拔出,撕下一片烂衣袍,将小狐狸的伤口包好,轻轻放入宽大的衣袖里,说也来怪,小狐狸竟忍住疼痛,一动不动的躺在书生的袖怀之中。
书生刚刚端起书,只听得马蹄声轰轰而至,数十匹高大骏马踏青飞来,为头的是一个虬髯大汉,满身华贵地叫道:“兀那书生,可曾见过一只受伤的狐狸逃过?”
书生抬起头来:“兄台说的可是一只满身雪白的狐狸?”
虬髯客身旁闪出一团绿影,娇喝道:“正是,正是我射中的那只狐狸,那小畜生呢?”
书生只闻香风扑面,迎面是一张如花笑脸,书生猛然间惊慌失措,意迷情乱,好半天才回过神来,指着身后结结巴巴的说:“刚刚从这边跑过。”
少女娇声说道:“多谢书生!我们追!”