前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【初识Go】| Day1 Go语言特征&开发环境配置

【初识Go】| Day1 Go语言特征&开发环境配置

原创
作者头像
yussuy
修改2020-12-15 10:32:23
5270
修改2020-12-15 10:32:23
举报

久闻Go语言大名,了解它是Google开发的一门静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。由于Go对于高并发的处理表现优异,很多互联网大厂纷纷投奔,比如听说字节跳动早期为了快速构建系统,很多后台应用使用Python语言,随着用户量和访问量的增加逐渐使用Go进行替代,还有滴滴、腾讯内部也都有很多采用Go语言作为后端语言的项目。

虽然之前也尝试学习和编写简单Go程序,但并未完全坚持下来,现在重拾起来,并通过学习笔记的方式进行记录,希望借此入门Go语言。

Go语言特性

通过查阅资料可以得知Go具有以下特性,

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值(C++、Java本身不支持,需借助其他数据结构)
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性
  • ……………

由于个人学习习惯,在学习一门语言的时候不喜欢看大量理论,所以“该知道的都知道,不知道的慢慢了解”,直接搭建环境开干!

Go环境配置

之前一直习惯于在Windows下进行开发和编程,进行过Go环境安装,Windows下安装Go环境比较简单,直接运行MSI安装包,并在环境变量配置GOPATH=安装位置即可。

因为一直听说Linux / Mac系统对开发工作更加友好,尝试在Virtual Box中搭建Ubuntu虚拟机,并基于此系统进行Go环境的搭建,后续通过Windows下的VSCode的 Remote-SSH 插件远程连接,进行开发工作。

下面记录在Ubuntu虚拟环境下搭建Go环境的过程,及在过程中遇到的关于Linux下设置环境变量的坑

Linux下配置Go环境

  1. Windows下安装Ubuntu虚拟机

网上有大量教程,不再赘述。(替换为国内代理源)

  1. Go安装

参考 https://studygolang.com/dlhttps://docs.studygolang.com/doc/install

  • 下载Go安装包至Linux下;
  • 解压安装Go安装包
代码语言:txt
复制
 ```bash
代码语言:txt
复制
 sudo tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
代码语言:txt
复制
 ```
  • 配置环境变量(此处有坑)
代码语言:txt
复制
 ```bash
代码语言:txt
复制
 export PATH=$PATH:/usr/local/go/bin
代码语言:txt
复制
 export GO111MODULE=on
代码语言:txt
复制
 export GOPROXY=https://goproxy.cn
代码语言:txt
复制
 ```
  • 验证
代码语言:txt
复制
 ```bash
代码语言:txt
复制
 go version
代码语言:txt
复制
 ```
  1. VS Code远程虚拟机进行Go开发
  • 安装Remote-SSH插件
代码语言:txt
复制
 虚拟机网络配置选择“桥接网卡”,在Remote-SSH插件中配置虚拟机IP地址即可远程连接上虚拟机环境。
  • 安装Go插件
代码语言:txt
复制
 为在开发过程中获得更友好的代码提示和调试体验,安装Go插件。
  • VS Code连接虚拟机进行开发:
代码语言:txt
复制
 - 使用```Ctrl + shift + P```调用VS Code快速命令。
 - 搜索Toggle Terminal打开终端。
 - mkdir新建一个Projects文件夹。
 - code Projects即可打开Projects文件夹,把文件夹作为项目文件夹在下面编写代码。

★Linux环境变量配置的坑

在terminal界面配置好环境变量后,发现go version可以返回正确提示。但当重开terminal界面或者重启虚拟机后再次运行,有错误提示。

zsh: command not found: go

仔细回头翻阅官网的安装指南https://docs.studygolang.com/doc/install,发现有这样的说法,

You can do this by adding the following line to your $HOME/.profile or /etc/profile (for a system-wide installation):

export PATH=$PATH:/usr/local/go/bingo环境变量如果直接写在terminal只对当前窗口有效,需要写入到 $HOME/.profile 或者 /etc/profile(对所有用户有效)中,可参考https://www.cnblogs.com/xiaofeng666/p/11171783.htmlhttps://www.linuxprobe.com/environment-variable-configuration.html,具体操作步骤,

生效时间:新开终端生效,或者手动source /etc/profile生效

生效期限:永久有效

生效范围:对所有用户有效

Linux环境变量配置方法六:vim /etc/environment

该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限:

如果/etc/bashrc文件不可编辑,需要修改为可编辑

chmod -v u+w /etc/environment

vim /etc/profile

在最后一行加上

export PATH=$PATH:/usr/local/go/bin

export GO111MODULE=on

export GOPROXY=https://goproxy.cn

代码语言:txt
复制
操作完发现仍有问题,报错```zsh: command not found: go```,通过查阅资料,发现是由于自己安装了zsh,

需要在把.bash_profile 全部环境变量加入 zsh shell,或者在zsh shell中加入go环境变量。这里直接将环境变量添加到.zshrc中了。

```bash

sudo vim .zshrc

在最后一行加上

export PATH=$PATH:/usr/local/go/bin

export GO111MODULE=on

export GOPROXY=https://goproxy.cn

source ~/.zshrc

代码语言:txt
复制
## 第一个Go程序 Hello World

永远的```Hello,World```:

```go

package main

import "fmt"

func main() {

/ Always Hello, World! /

fmt.Println("Hello, World!")

}

代码语言:txt
复制

解释:

  1. package main 定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  2. import "fmt" 告诉编译器程序运行需要用 fmt 包,fmt 包含有格式化 I/O 函数,类似于 C 语言的 printf 和 scanf。
  3. func main () 是程序开始执行的函数,main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init () 函数则会先执行该函数)。
  4. {} 中 "{" 不可以单独放一行。

★注:Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部 -- 特定分隔符后加; 来分隔多条语句,比如会在 ) 后加分号:所以{} 中 "{" 不可以单独放一行,防止出现:

代码语言:txt
复制

// 等效于

func main(); // 无函数体

{

代码语言:txt
复制
   println("hello world")

}

代码语言:txt
复制
  1. /.../ 是注释,在程序执行时将被忽略。// 单行注释, / ... / 多行注释也叫块注释,不可以嵌套使用,一般用于包的文档描述或注释成块的代码片段。
  2. fmt.Println (...) 将字符串输出到控制台,并在最后自动增加换行字符 \n。用 fmt.Print ("hello, world\n") 可以得到相同的结果。

关于GO111MODULE(和GOPROXY)的小困惑

对于环境变量,GO111MODULEGOPROXY的作用理解的不是很透彻,翻看了一些博客但还是一知半解,此处不求甚解🙅‍,略略略~,等到了“第8节、包管理”后再回头研究一下这里,参考:

https://learnku.com/go/t/39086

https://www.cnblogs.com/pu369/p/12068645.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go语言特性
  • Go环境配置
    • Linux下配置Go环境
      • ★Linux环境变量配置的坑
      • 如果/etc/bashrc文件不可编辑,需要修改为可编辑
      • 在最后一行加上
      • 在最后一行加上
        • 关于GO111MODULE(和GOPROXY)的小困惑
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档