读前必读,下面所有内容都是来自这里。 放到这里的目的,就是为了比对一下,哪里的读者多。平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看。(X := '难' || X :='耐' || X := '好' ) 都是原创,不是抄袭。如果真要拿去,也所谓,好歹给我留个名,也不枉费码字之苦。 您说是不是?

话接上节,继续聊。如果你此时此刻看到了“Hello God, My Golang.”,那么检查一下有没有找到一首劲爆的音乐,旁边有没有沏好一杯好茶。 如果有,就关掉音乐喝掉茶吧。 写代码是需要一心一意的,耳朵旁边有音乐,那你到底是留着心听音乐呢?还是留着心想逻辑呢? 所以,最好停掉音乐专心致志。 如果不停掉... 那就别停了。 写代码心情最重要,无论怎样,高兴就好。 只要嗨起来,你的code就能飞起来!

先生们,女士们。 如果现在弃坑还来得及,因为下面即将开始你真正的Golang占坑,呸,Golang入坑之旅。

Golang的库

就目前稍微有些知名度的编程语言来说,都存在标准库和第三方库的说法。 通俗而言,标准库是官方提供的库,有官方来维护。 别人只能看不能改,用着不爽也只能不爽着。如果哪天实在不爽了,就自己写一个库来替代官方库,这个自己写的库就是第三方库。

针对Golang而言,官方库和第三方库非常容易设别。 官方库的库名简短有力,例如:fmt,net/http,log等等这些非常短的库名那就是官方库。相对应的是第三方库,又长又不容易记,例如: github.com/julienschmidt/httproute(一个轻量级的网络路由库),github.com/andy-zhangtao/gogather/random(自己封装的自用工具库)。

除了上面两类库之外,还有一类特别的库,这些库都以golang.org开头,例如golang.org/x/build。 这一类库不经常使用,所以不在标准库之列,但又是Golang官方在维护,所以相当于第二标准库。

以上三类库,在使用的时候优先使用标准库。如果标准库无法满足需求,再使用第二标准库(golang.org/开头的库),还是无法满足你的需要,再有选择的使用第三方类库。寻找第三方库,当仁不让的要去github寻找了。但茫茫人海中,有你有我.. (能哼出调的人,就暴露年龄了)。

呵呵,开个小玩笑,调节一下气氛。

github上面代码太多了,一顿乱找,效果不好。 所以先去google搜索一下,比如你要处理json,就搜:golang json。 如果你要创建restful API,就搜golang create restful api。 看看过来人推荐的是哪个库,然后货比三家,在github上面哪家库的star多,就当个死粉拥趸,直接用它。

用? 怎么用? 往下看!

Golang的工具

在你安装好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库

人生不累,绝对受罪。人,生下来就是为了瞎折腾的。不折腾的人生,要么是植物人,要么就是快死的人。 写代码同样如此,光看不练学不会。这个小章节中,我们开始创建人生中的第一个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之旅还会有一个一个的坑,我会由浅入深,由内而外,由易到难,慢慢的说。所以甭着急,到了后面入了门,我们飞的速度就会变快了。

初生牛犊不怕虎 golang入坑系列的更多相关文章

  1. 入坑第二式 golang入坑系列

    史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...

  2. 维多利亚的秘密 golang入坑系列

    原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...

  3. 分水岭 golang入坑系列

    第三式开篇语有些负面, 所以这里就不贴了.有兴趣的自己可以去看看 https://andy-zhangtao.gitbooks.io/golang/content/ .怒发冲冠,意气之作.看完就完了, ...

  4. 我们是80后 golang入坑系列

    现在这个系列,已经开始两极分化了. 点赞的认为风格轻松,看着不困.反之,就有人嫌写的罗里吧嗦,上纲上线.所以善意提醒,里面不只是技术语言,还有段子.专心看技术的,千万别点!别怪我没提醒!差点忘说,版权 ...

  5. 准备冲锋 golang入坑系列

    史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意. 所以换成史前摘要,反正是一个意思. 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里.放到博客园的目的是为了方便 ...

  6. 坐忘峰 golang入坑系列

    读前必读: 本文写于20日,首发于gitbook. 迟到的是日期,没变的是内容. 点击进入 https://andy-zhangtao.gitbooks.io/golang/content/ 可以看到 ...

  7. 崩溃 golang入坑系列

    早上(11.30)收到邮件,Vultr东京机房网络故障.当时搭建SS时,考虑到了机房故障.所以特意分出了日本和香港两条线路.但千算万算,忘记数据库还在东京机房中. 现在网络故障,SS服务器无法读取数据 ...

  8. 乐呵乐呵得了 golang入坑系列

    开场就有料,今天返回去看了看以前的文章,轻松指数有点下降趋势.一琢磨,这不是我的风格呀.一反思,合着是这段时间,脑子里杂七杂八的杂事有点多,事情一多,就忘了快乐.古话说得好:愁也一天,乐也一天,只要还 ...

  9. 来自朝鲜的问候 golang入坑系列

    鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...

随机推荐

  1. FPGA与数字图像处理技术

    数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...

  2. jquery定时刷新数据

    $(function () { setInterval("startRequest()", 3000); }); function startRequest() { $(" ...

  3. 关于Android SDK Manager无法获取更新列表的正确设置

    1.以"管理员身份运行"SDK Manager. 2.Android SDK Manager"=>"Tools"=>"Optio ...

  4. 当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)

    上篇主要介绍了 GitLab WorkFlow 以及 CI/CD 做的事情,并且详细分析 GitLab CI 跟 Runner 信息交互是如何进行的.接下来将为大家讲解 Executor 的实现,再通 ...

  5. 安装Sublime Text 3插件的方法:

    安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧,谢谢! 直接安装 安装Sublime text 2插件很方便,可 ...

  6. Guava快速入门

    Guava快速入门 Java诞生于1995年,在这20年的时间里Java已经成为世界上最流行的编程语言之一.虽然Java语言时常经历各种各样的吐槽,但它仍然是一门在不断发展.变化的语言--除了语言本身 ...

  7. git 分支改名

    给一个git分支改名的方法很简单 如果对于分支不是当前分支,可以使用下面代码: git branch -m 原名 新 如果是当前,那么可以使用加上新名字 git branch -m 原名 参见: ht ...

  8. win10 uwp 右击选择 GridViewItem

    有时候我们需要选择一个 GridView 的一项,通过我们右击. 于是我们需要在 GridView 的 SelectionMode 为 Single ,IsRightTapEnabled 为True ...

  9. ArcGIS二次开发AO软件安装破解教程

    最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...

  10. LINUX 笔记-ls命令

    常用参数: -l :列出长数据串,包含文件的属性与权限数据等 -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用) -d :仅列出目录本身,而不是列出目录的文件数据 -h :将文件 ...