首先go语言是google爸爸自己设计出来语言应该没什么问题,毕竟go和google给人感觉还是挺有联系的。
go是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
不得不说确实挺现代的感觉,毕竟google开发就是为了解决现在web端实际问题的,因为js再怎么在运行内核上魔改,语言架构就在那里,效率是有上限的,不如一了百了干脆搞一个大家都高兴的语言开心开心。
但是什么功能都有真的好吗,是不是少了点灵魂,作为一个朴实的python玩家,刚开始上手go的时候确实有一种得到新玩具的感觉,谷歌还是老套路,官方就把一切都给你放的挺挺的,哪里还需要啥第三方的插件和包。
开发模式确实很方便
go 工具为公共代码仓库中维护的开源代码而设计。 无论你会不会公布代码,该模型设置工作环境的方法都是相同的。这样一搞确实方便了不少,不需要想python每个框架还有自己乱七八糟的文件架构,麻不麻烦啊
bin/
hello # 生成的執行檔
outyet # 生成的執行檔
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # 編譯時,生成的對象檔案
src/
github.com/golang/example/
.git/ # 外部 Git 庫的詮釋資料
hello/
hello.go # Git 庫的程式碼
outyet/
main.go # Git 庫的程式碼
main_test.go # Git 庫的程式碼(測試用的程式)
stringutil/
reverse.go # Git 庫的程式碼
reverse_test.go # Git 庫的程式碼(測試用的程式)
golang.org/x/image/
.git/ # 外部 Git 庫的詮釋資料
bmp/
reader.go # Git 庫的程式碼
writer.go # Git 庫的程式碼
大概的安排就是这样,很规范的感觉很不错
Go的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,透过Goroutine能够让程序以异步的方式运行,而不需要担心一个函数导致程序中断,因此Go也非常地适合网络服务。
Goroutine是类似线程的概念(但Goroutine并不是线程)。线程属于系统层面,通常来说创建一个新的线程会消耗较多的资源且管理不易。而 Goroutine就像轻量级的线程,但我们称其为并发,一个Go程序可以运行超过数万个 Goroutine[9],并且这些性能都是原生级的,随时都能够关闭、结束。一个核心里面可以有多个Goroutine,透过GOMAXPROCS参数你能够限制Gorotuine可以占用几个系统线程来避免失控。
在内置的官方包中也不时能够看见Goroutine的应用,像是net/http中用来监听网络服务的函数实际上是创建一个不断运行循环的Goroutine。
用一些包管理器啥的来装环境现在真是方便极了,怎么能难得倒作为一个装环境鬼才的我
go和流行的语言一样也都有自己的包管理器
具体流程呢
apt-get install golang
然后就加一下全局变量啦
然后再创建一个自己github下的目录
恭喜你
可以开始go语言的开发了
如果有管理其apt或则yum,就方便很多了
sudo apt-get install golang
sudo yum install golang
然后就要配置环境变量了,Linux下又两个文件可以配置,其中/etc/profile是针对所有用户都有效的;$HOME/.bashrc是针对当前用户有效的,可以根据自己的情况选择。
针对所有用户的需要重启电脑才可以生效;针对当前用户的,在终端里使用source命令加载这个$HOME/.bashrc即可生效。
也就是
source ~/.bashrc
使用文本编辑器比如VIM编辑他们中的任意一个文件,在文件的末尾添加如下配置保存即可:
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
其中GOROOT环境变量表示我们GO的安装目录,这样其他软件比如我们使用的Go开发IDE就可以自动的找到我们的Go安装目录,达到自动配置Go SDK的目的。比如vscode或则sublime
第二句配置是把/usr/local/go/bin这个目录加入到环境变量PATH里,这样我可以在终端里直接输入go等常用命令使用了,而不用再加上/usr/local/go/bin这一串绝对路径,更简洁方便。
以上配置好之后,我们打开终端,属于如下命令,就可以看到go的版本等信息了。
~ go version
go version go1.7.4 linux/amd64
这就说明我们已经安装go成功了,如果提示go这个命令找不到,说明我们配置还不对,主要在PATH这个环境变量,仔细检查,直到可以正常输出为止。
配置好工作目录后,就可以编码开发了,在这之前,我们看下go的通用项目结构,这里的结构主要是源代码相应地资源文件存放目录结构。
其中就吸收很多java的宝管理的精髓
比如神奇的/org/github/www
我们知道源代码都是存放在GOPATH的src目录下,那么多个多个项目的时候,怎么区分呢?答案是通过包,使用包来组织我们的项目目录结构。有过java开发的都知道,使用包进行组织代码,包以网站域名开头就不会有重复,比如我的个人网站是flysnow.org,我就可以以·flysnow.org·的名字创建一个文件夹,我自己的go项目都放在这个文件夹里,这样就不会和其他人的项目冲突,包名也是唯一的。
src
├── github.com
这样的好处就是
import (
"github.com/spf13/hugo/commands"
)
妈妈再也不要担心我忘记把下载来的包方哪里了
go有一个好地方就是可以快速编译成一个可以全部执行的脚本程序
因为之前也介绍了 如果我们可以直接执行$GOPATH下的bin
所以go提供一种编译的方法
go install github.com/huangjundashuaige/hello
其中就是必要要提高需要编译的文件相对于$GOPATH/bin的地质,
这也是和JAVA学怀了,必须一个主文件下只能有一个main这也就是执行的开始点。
最后一旦编译就会自动把可以执行的文件放入$GOROOT/bin下
然后包名也就是可执行程序的名字
go提供了一个获取远程包的工具go get,他需要一个完整的包名作为参数,只要这个完成的包名是可访问的,就可以被获取到,比如我们获取一个CLI的开源库:
go get -v github.com/spf13/cobra/cobra
就可以下载这个库到我们$GOPATH/src目录下了,这样我们就可以像导入其他包一样import了。
这就相当于直接把github变成了go的宝管理器,真是非常聪明的design
如果我不知道github被windows收购了,还真的会议为github这个网站不过就是一个专门展示go的三方包给其他人看呢。
只要将 gitconfig里面的
https:
[remote “origin”]
url = https://git.coding.net/asun_coder/DMP_JavaBackground.git
fetch = +refs/heads/:refs/remotes/origin/
转换成
ssh:
[remote “origin”]
url = [email protected]:asun_coder/DMP_JavaBackground.git
fetch = +refs/heads/:refs/remotes/origin/