Go笔记

Jul 12, 2018


记录开发中实际涉及的Go开发语言知识


背景


在ubunut镜像的服务器部署应用


安装go


  • 登录go官网获取最新go的下载链接。
  • 执行wget https://golang.org/dl/go1.16.4.linux-amd64.tar.gz下载安装包。
  • 执行tar -C /usr/local -xzf https://golang.org/dl/go1.16.4.linux-amd64.tar.gz将go安装到/usr/local目录下。
  • 编辑~/.bashrc文件,在最后添加如下内容:

    export GOROOT=/usr/local/go export GOPATH=/root/work/go export GOBIN=/root/work/go/bin export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin

  • 执行source ~/.bashrc使配置生效。


安装应用


  • 进入工程目录,执行go build; go install, 假设在workspace目录下生成的bin文件为hello_world。
  • 执行vim /etc/systemd/system/hello_world.service, 添加如下内容:

    [Unit] Description=message aggrate service

    [Service] Restart=always User=root Group=root ExecStart=/root/work/go/bin/hello_world

    [Install] WantedBy=multi-user.target

  • 执行systemctl start hello_world.service启动应用


语言的特性


Go从本质上(程序和结构方面)来实现并发编程。

Go没有类和继承的概念,它通过接口(interface)的概念来实现多态性。

Go语言有一个轻量级的类型系统,在类型之间也没有层级之说。而传统的面向对象语言中,它们总是通过复杂的模式来构建庞大的类型层级,使得面向对象编程技术显得非常臃肿。

Go语言使用静态类型,所以它是一门类型安全的语言,作为强类型语言,隐式的类型转换时不被允许的。

Go缺乏如下一些在大多数面向对象语言中使用的特性:

  • 不支持动态链接库
  • 不支持泛型
  • 不支持静态变量


开发环境配置


环境变量


GOPATH环境变量指定了你workspace的位置,在Unix系统下一般默认为$HOME/go

GOROOT是按照Golang的目录,使用命令go env可以查看当前go中的环境变量值。

如果想要临时修改GOPATH值,可以执行如下命令:

$ export GOPATH=$HOME/workspace
$ export PATH=$PATH:$(go env GOPATH)/bin

如果想要永久修改,可以在家目录的.bashrc文件中配置:

export GOPATH=$HOME/workspace
export GOBIN=$HOME/workspace/bin
export PATH=$PATH:%GOPATH/bin



基本语法


基本数据类型


类型


类型定义了某个变量值的集合与可对其进行操作的集合。


指针


不像java和.NET,Go提供了控制数据结构的指针的能力,但是和c/c++中指针不同的是,Go中的指针不能进行运算。

结构(struct)与方法(method)


Interfaces(接口)




开发工具


vim


安装vim-go插件


使用vim插件管理工具Vundle安装vim-go很方便。

  • 1.在~/.vimrc配置文件中添加Plugin 'fatih/vim-go'

  • 2.进入vim,执行:PluginInstall安装vim-go插件。

  • 3.执行:GoInstallBinaries安装vim-go的依赖库。

  • 4.执行:help vim-go查看如何使用vim-go插件

golang-0

得益于go语言的内建源码管理功能,使用vim-go插件定位函数原型时不像c和c++那样,需要源码文件在同一目录树下。比如,你的GOPATH为~/go,而你在~/work/demo目录下vim打开xx.go文件,使用CRTL+]可以直接打开位于~/go目录下的函数原型所在go文件。


Goland


Editor basics


游览代码最需要的就是navigate功能,和一般IDE一样,Goland中可以"Ctrl+单击"进行navigate forward,而back是"Ctrl + Alt + <-"