读前必读,下面全部内容都是来自这里。 放到这里的目的,就是为了比对一下,哪里的读者多。平心而论,一样的Markdown,博客园排版真心X看,怎么瞅怎么X看。(X := '难' || X :='耐' || X := '好' ) 都是原创,不是抄袭。若是真要拿去,也所谓,好歹给我留个名,也不枉费码字之苦。 您说是否是?git
话接上节,继续聊。若是你此时此刻看到了“Hello God, My Golang.”,那么检查一下有没有找到一首劲爆的音乐,旁边有没有沏好一杯好茶。 若是有,就关掉音乐喝掉茶吧。 写代码是须要一心一意的,耳朵旁边有音乐,那你究竟是留着心听音乐呢?仍是留着心想逻辑呢? 因此,最好停掉音乐专心致志。 若是不停掉... 那就别停了。 写代码心情最重要,不管怎样,高兴就好。 只要嗨起来,你的code就能飞起来!github
先生们,女士们。 若是如今弃坑还来得及,由于下面即将开始你真正的Golang占坑,呸,Golang入坑之旅。golang
就目前稍微有些知名度的编程语言来讲,都存在标准库和第三方库的说法。 通俗而言,标准库是官方提供的库,有官方来维护。 别人只能看不能改,用着不爽也只能不爽着。若是哪天实在不爽了,就本身写一个库来替代官方库,这个本身写的库就是第三方库。web
针对Golang而言,官方库和第三方库很是容易设别。 官方库的库名简短有力,例如:fmt,net/http,log等等这些很是短的库名那就是官方库。相对应的是第三方库,又长又不容易记,例如: github.com/julienschmidt/httproute(一个轻量级的网络路由库),github.com/andy-zhangtao/gogather/random(本身封装的自用工具库)。编程
除了上面两类库以外,还有一类特别的库,这些库都以golang.org开头,例如golang.org/x/build。 这一类库不常用,因此不在标准库之列,但又是Golang官方在维护,因此至关于第二标准库。json
以上三类库,在使用的时候优先使用标准库。若是标准库没法知足需求,再使用第二标准库(golang.org/开头的库),仍是没法知足你的须要,再有选择的使用第三方类库。寻找第三方库,当仁不让的要去github寻找了。但茫茫人海中,有你有我.. (能哼出调的人,就暴露年龄了)。api
呵呵,开个小玩笑,调节一下气氛。restful
github上面代码太多了,一顿乱找,效果很差。 因此先去google搜索一下,好比你要处理json,就搜:golang json。 若是你要建立restful API,就搜golang create restful api。 看看过来人推荐的是哪一个库,而后货比三家,在github上面哪家库的star多,就当个死粉拥趸,直接用它。网络
用? 怎么用? 往下看!dom
在你安装好golang以后,标准库就已经安装好了。 后面两类库怎么安装呢? 首先不要奢求把这两类库都彻底安装好,Golang安装包里面可没有"彻底安装"这一个选项。后两类是按需安装,当你须要的时候再安装。例如此时此刻,须要写一个web server了,经过标准库net/http能够很容易建立一个webserver,但咱们但愿能处理Restful API风格的请求,那标准库就显得笨拙很差用了。这时,咱们安装一个第三方库,好比github.com/julienschmidt/httprouter. 安装过程很简单,手把手,跟着我敲完下面的字母,别偷懒哦:
go get github.com/julienschmidt/httprouter
不报错,就是安装成功。 装哪里了?老铁猜一猜? 猜对有奖哦~
没头绪?返回上一节,找四个字:工做空间(GOPATH). 全部的源码都保存在GOPATH/src里面了,因此本身到GOPATH/src/github.com/julienschmidt/httprouter里面看看,是否是满满都是.go源代码?
如今你只须要记住这一个工具 go get 就行。 仍是那句话,包子要一口一口的吃,粥要一口一口的喝,找嘛急呀,慢慢来。
当你须要一个非标准库的时候,就娴熟的敲入go get <库名> 潇洒的敲一个回车,而后能不能装成功就看造化吧(由于GFW的存在,因此你懂得。。。)运气好,一鼓作气。 运气差,呵呵,出去闷根烟,侃个天,回来在看看运气值有没有爆棚。
若是库升级了怎么办?客官,切莫觉得库都是一成不变的。 马克思说了,世间万物都是在变化的。 当第三方库也发生变化了,在娴熟的敲一个go get -u <库名>,潇洒的敲一个回车,而后能不能装成功就看造化吧(由于GFW的存在,因此你懂得。。。)运气好,一鼓作气。 运气差,呵呵,出去闷根烟,侃个天,回来在看看运气值有没有爆棚(此处为了表示内容的充实,直接复制了上一段✌️).
看到这里,咱们稍微复习一下。下面三个问题,看你知道不知道(此图放在个人github中,看不完整就刷新再试):
人生不累,绝对受罪。人,生下来就是为了瞎折腾的。不折腾的人生,要么是植物人,要么就是快死的人。 写代码一样如此,光看不练学不会。这个小章节中,咱们开始建立人生中的第一个Golang库。
由于是第三方库,因此起个名字,叫作github.com/user/stringutil,中间的user能够改为你的github帐户名。取好名,建目录。咱们来建立这个库:
mkdir $GOPATH/src/github.com/user/stringutil
接着,在该目录中建立名为reverse.go
的文件,内容以下:
// stringutil 包含有用于处理字符串的工具函数。 package stringutil // Reverse 将其实参字符串以符文为单位左右反转。 func Reverse(s string) string { r := []rune(s) for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { r[i], r[j] = r[j], r[i] } return string(r) }
能手敲就手敲,实在不能手敲就复制。但出来混的,早晚要还帐,写代码尤为如此。手敲/粘贴完毕后,用 go build
命令来测试该包的编译。就在$GOPATH/src/github.com/user/stringutil目录里面执行,切莫跑错目录。
正常状况下,应该是不报错的。若是报错了,就是敲错字母/粘贴行,再回头好好检查检查。如今你人生的第一个golang库就建立完毕了,不要怀疑本身,也不要怀疑我,真的!你的第一个Golang库建立完毕了。
我知道你的问题,How to use this library?(怎么使用这个库?) 顺着鼠标往下看。
建立一个$GOPATH/src/github.com/user/hello目录。
mkdir $GOPATH/src/github.com/user/hello
在里面建立一个main.go,而后手敲或者粘贴下面的代码:
package main import ( "fmt" "github.com/user/stringutil" ) func main() { fmt.Printf(stringutil.Reverse("!oG ,olleH")) }
执行go build. 看看会不会出来一个hello的二进制文件,执行这个二进制文件
./hello Hello, Go!
若是报错,那么检查一下你的目录结构是否是这样的:
src/ github.com/user/ hello/ hello.go # 命令源码 stringutil/ reverse.go # 包源码
若是不是,就调整一下。若是是,就看看是否是粘贴错或者敲错了代码。
本章节,是你Golang之旅第一个坑。还好,不深。只到脚踝。深吸一口气,不要吐出来,慢慢体会要被憋死的感受... 后面的Golang之旅还会有一个一个的坑,我会由浅入深,由内而外,由易到难,慢慢的说。因此甭着急,到了后面入了门,咱们飞的速度就会变快了。