开篇啰嗦
毕业至今已有两个多月了,在帝都和家乡的抉择下,我选择留在了家乡沈阳,同时也有幸找到了一份满意的工作(感谢公司前辈们的关照
)。
作为Android开发者,在目前IT圈环境下,我感觉只掌握一项(端)开发技能的话,无论是发展空间还是就业机会,都会越来越不理想,所以我一直想利于业余时间来学习一项后端开发技能,最后经朋友的推荐下(手动@晚餐的小牛排),我了解到了Golang。
Go/Golang
Go/Golang是谷歌在2009年发布的一款开源的面向对象编程语言。至于为什么叫做Golang,我想大概是是因为“Go”这个单词太通用了,搜索引擎不能很好的辨认吧。(本文统称为“Golang”)
Golang特性
1. 高性能,Golang编译的程序不需要虚拟机环境就可以运行,因此在绝大多数情况下Golang的效率仅次于C/C++。
2. 高并发,Golang引入了goroutine概念,它是一种比线程更”轻盈“的协程,它使得并发编程变得简单粗暴,而且可以充分利用多核心的CPU(没有黑Python)。
3. 垃圾回收,Golang自带GC,不需要像C++那样使用delete或者free()来释放内存。
还有很多特性我就不一一列出了,仅凭以上这三点足以让我喜欢上Golang。
正文
今天周末,起床便打开电脑在github上阅读《The Way to Go》继续学习Golang。奈何本人阅读障碍,看了一小时就看不下去了...便想着搞点事情。之前了解到Golang交叉编译很方便,正巧手中有个树莓派3B,试下在树莓派上跑下Golang程序吧。
随之写了一行无脑代码
func main() {
fmt.Println("Hello Golang!")
}
这需要注意下,树莓派3B虽然是arm64的CPU,但是目前官方Raspbian操作系统只有32位的(不考虑SLES),所以cd到源码目录下执行以下命令
GOOS=linux GOARCH=arm go build
这里GOOS表示操作系统,GOARCH表示CPU架构(表示交叉编译太方便了)。
编译完成后在源码目录下会生成一个和包同名的文件,在我这里为main。之后通过scp推到树莓派上运行通过,一切都在意料之中
重点来了!!
我突然间想到,既然arm架构的树莓派可以运行Golang程序,那我的等于四(一加手机3)没有理由不能!一不做二不休,直接撸一个HTTP服务器
func main() {
http.HandleFunc("/hello", SayHello)
http.ListenAndServe(":80", nil)
}
func SayHello(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("Hello Golang!"))
}
这是一个用Golang标准库写的HTTP服务器,每次请求返回一个“Hello Golang”的字符串。可以看出Golang标准库非常强大,仅需要几行代码,并且不需要Tomcat、Nginx等就可以写出高并发接口程序。
需要注意的是,一加手机3的CPU为骁龙820,是arm64架构,所以编译程序需要执行以下命令
GOOS=linux GOARCH=arm64 go build
编译生成文件之后推送到手机上,在终端模拟器中运行main文件出现了一个问题,如图
错误提示Permission denied。很明显是权限问题,随即执行命令
chmod 777 main
再次运行,发现还是Permission denied。到Re文件管理器发现 main 文件没有被赋予777权限,而是771!
猛然想起Android外部存储设备的文件系统不可修改用户组权限!
继续执行命令
su root
mv main /
su root 是切换到root用户,Android中访问系统根目录也就是 / 目录需要root权限(手机必须获取root权限)。
mv main / 就是把main移动到 / 根目录(需要挂载system分区为可读写)。
最后执行命令
chmod 777 main
./main
你会惊奇的发现运行成功了!打开手机浏览器,访问如下地址
http//:127.0.0.1/hello
大家都知道127.0.0.1是就是localhost,本机IP地址。最后是激动忍心的时刻!
手机浏览器显示的请求结果正是我们在Golang代码中返回的“Hello Golang!”。
经测试,在同一局域网下,PC浏览器也可访问Android手机中运行的服务端程序!
这TM完全可以在Android上结合自带的SQLite3部署一个小型服务器啊!以后有时间绝对搞一个!
写在最后
本文虽然没有什么技术含量,但是我相信会有同学了解到新的知识,我也算没有白写
。第一次写文章,也是难为我这小学的写作水平了...
今后工作之余我会分享开发中的经验与趣事,非常感谢您的阅读!