【前言】随着互联网的迅速发展,WEB服务器成为了连接世界的关键组件之一。而在现代编程语言中,Go 语言因其卓越的性能和并发能力而备受青睐。本博客基于x86 Linux系统来搭建golang WEB开发环境。
选择Go语言构建Web服务器优势
在选择一门语言构建 Web 服务器时,性能、并发性和开发效率是关键因素。而 Go 语言在这些方面都表现出色:
- 高性能: Go 语言被设计成一门编译型语言,具有接近原生代码的性能。这使得 Go 语言的Web 服务器能够处理大量的并发连接和请求。
- 并发性: Go 语言内置了 Goroutine 和 Channel 的支持,使得并发编程变得非常容易。这对于 Web 服务器来说至关重要,因为它们需要同时处理多个请求。
- 简洁的语法: Go 语言拥有简洁的语法和清晰的代码结构,使得开发者可以更加专注于业务逻辑,而不必过多关注底层细节。
一、安装golang环境
1.1、下载golang
golang代码版本下载:All releases - The Go Programming Language (google.cn)
注意:建议下载最新版本的前1~2个版本。
此处以go1.21.9版本为例:
1.2、解压下载的go包
1.2.1、拷贝go包至Linux
将下载的go包文件传入到Linux系统中,建议将其安装至/usr/local目录下。
1.2.2、解压go包
sudo tar -zxvf go1.21.9.linux-386.tar.gz
1.3、配置环境变量
在vim ~/.bashrc文件末尾添加如下内容:
# golang env config
export GOPATH=/home/tanglg/workspace/go_workspace
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
输入source ~/.bashrc生效配置。
注意:
- (1)以上路径可自行视实际情况定义。
- (2)go1.18版本以后默认开启go modules模式,无需配置【export GO111MODULE=on】。
- (3)go modules模式下,可以不配置GOPATH,默认为【/root/go】。
- (4)GOROOT定义go源码的路径。
- (5)GOPATH定义go的工作空间,即go依赖包下载后存储路径。
1.4、查看go版本
指令:go version
能查看到你安装的go版本,说明go环境配置成功。
1.5、设置go代理环境变量
设置了go代理环境变量,在下载依赖包时就不会出现网络连接超时的情况。
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPRIVATE=git.mycompany.com,githup.com/my/private
1.6、查看go环境变量
指令:go env
二、开发go应用
2.1、GOPATH目录
一般来说GOPATH下面会有三个文件夹:bin、pkg、src,没有的话自己创建。每个文件夹的作用如下所示:
- bin:编译后的可执行文件的存放路径。
- pkg:编译包时,生成的.a文件的存放路径。
- src:开发应用源码路径,一般我们的工程就创建在src下面。
2.2、编译和初始化工程
下面以这个示例来说明go的编译过程:
2.2.1、初始化Go工程
进入到test-pro目录,分别执行以下指令: (首次执行即可)
(1)go mod init test_web
(2) go mod tidy
注意:如果上述指令出现联网超时问题,请参照1.5节,设置go代理环境变量。
2.2.2、编译go程序
博主此处写了一个小脚本编译go程序,其内容如下所示:
#!/bin/bash
export AR=arm-linux-ar
export CC=arm-linux-gcc
export CXX=arm-linux-g++
export LINK=arm-linux-g++
export CGO_ENABLED=0
export GOARCH=arm
export GOOS=linux
export GOARM=5
go build -ldflags '-s -w --extldflags "-static -fpic"'
执行成功后,会输出可执行文件:test_web
至此,go的安装和go应用程序的编译就结束了。
三、参考文献
Linux 下安装 Golang(适用于1.18及以上版本)_linux 安装golang-CSDN博客
Linux下go环境安装、环境配置并执行第一个go程序_linux go工作目录-CSDN博客
解决go mod tidy加载模块超时问题_go mod tidy 卡住-CSDN博客
Go语言涉及CGO的交叉编译(跨平台编译)解决办法 - 知乎 (zhihu.com)
【结束语】因技术能力有限,文章如有不妥之处,恳请各位技术大佬留言指正!