【小沐学Golang】基于Go语言搭建静态文件服务器

文章目录

  • 1、简介
  • 2、安装
    • 2.1 安装版
    • 2.2 压缩版
  • 3、基本操作
    • 3.1 go run
    • 3.2 go build
    • 3.3 go install
    • 3.4 go env
    • 3.5 go module
  • 4、文件服务器
    • 4.1 filebrowser
    • 4.2 gohttpserver
    • 4.3 goFile
  • 5、FAQ
    • 5.1 go.mod 为空
    • 5.2 超时
  • 结语

1、简介

https://golang.google.cn/

Go语言诞生于2007年9月20日。

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

在这里插入图片描述

语法简单 Go语言在自由度和灵活度上做了取舍,以此换来了更好的维护性和平滑的学习曲线。
部署友好 Go静态编译后的二进制文件不依赖额外的运行环境,编译速度也非常快。
交叉编译 Go仅需要在编译时简单设置两个参数,就可以编译出能在其它平台上运行的程序
天然并发 Go语言对于并发的支持是纯天然的,仅需一个关键字,就可以开启一个异步协程。
垃圾回收 Go有着优秀的GC性能,大部分情况下GC延时都不会超过1毫秒。
丰富的标准库 从字符串处理到源码AST解析,功能强大且丰富的标准库是Go语言坚实的基础。
完善的工具链 Go有着完善的开发工具链,涵盖了编译,测试,依赖管理,性能分析等方方面面。

在这里插入图片描述

2、安装

https://golang.google.cn/dl/
在这里插入图片描述
在这里插入图片描述

2.1 安装版

在这里插入图片描述

2.2 压缩版

在这里插入图片描述
在这里插入图片描述
配置环境变量:

GOPATH=E:\Test\go_project
GOROOT=E:\Test\go1.23.2.windows-amd64\go
PATH += E:\Test\go1.23.2.windows-amd64\go\bin

在这里插入图片描述
测试是否配置成功:

go version

在这里插入图片描述

3、基本操作

3.1 go run

编译完成并马上运行 Go 程序。go run 只支持属于 main 包的一个或多个文件作为参数,不然是不能进行编译的。

go run main.go
# or
go run -n main.go 

在这里插入图片描述

3.2 go build

编译指定的源文件、软件包和其他依赖,但是不会在编译后执行二进制文件。
go build 和 go run 在编译过程中其实是差不多的,不同之处是 go build 会生成编译好二进制文件并删掉编译过程产生的临时目录。若没有-o 指定文件名,则和当前目录名一致。

go build main.go
# or
go build -x main.go

在这里插入图片描述

3.3 go install

编译并安装源文件、软件包,即把编译后的文件(可执行二进制文件、归档文件等)安装到指定的目录中。将编译后的文件(可执行二进制文件、归档文件等)安装到指定的目录中。若设置了环境变量 GOBIN ,则把二进制可执行文件移到该目录。若禁用 Go modules 则放到 G O P A T H / p k g / GOPATH/pkg/ GOPATH/pkg/GOOS_$GOARCH下。

go install -x main.go

在这里插入图片描述

3.4 go env

当你安装的GO的语言版本大于1.13的时候,直接使用go env -w命令就行了.

go env -w GOPROXY=https://goproxy.io,direct
# Set environment variable allow bypassing the proxy for selected modules
go env -w GOPRIVATE=*.corp.example.com
go env -w GO111MODULE=on

使用go env环境变量在不同操作系统(Mac、Linux、Windows)之间交叉编译64位Go应用程序。通过设置CGO_ENABLED、GOOS和GOARCH,可以在本地构建目标平台的可执行文件,简化了部署流程,避免了将整个项目上传到服务器的需要。

Windows下编译Mac, Linux平台的64位可执行程序:

go env -w CGO_ENABLED=0 GOOS=darwin3 GOARCH=amd64 
go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64 

Linux下编译Mac, Windows平台的64位可执行程序:

go env -w CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 
go env -w CGO_ENABLED=0 GOOS=windows GOARCH=amd64 

Mac下编译Linux, Windows平台的64位可执行程序:

go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64
go env -w CGO_ENABLED=0 GOOS=windows GOARCH=amd64

3.5 go module

go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用。默认值为空,即go判断开不开启module的依据是看当前项目的根目录下有没有go.mod文件,当然我们也可手动更改为 on(全部开启)/off(全部不开启,不建议):

go env -w GO111MODULE=ongo env -w GOPATH=D:\Golang1.19\gopathgo env -w GOCACHE=D:\Golang1.19\gopath\go-build-cache

4、文件服务器

4.1 filebrowser

https://github.com/filebrowser/filebrowser
在这里插入图片描述

4.2 gohttpserver

https://github.com/codeskyblue/gohttpserver
在这里插入图片描述

输入如下编译命令:

go build

生成exe文件如下:
在这里插入图片描述
执行exe如下:
在这里插入图片描述
浏览器访问如下:
在这里插入图片描述

4.3 goFile

https://github.com/csznet/goFile
在这里插入图片描述

go build

生成exe文件如下:
在这里插入图片描述
浏览器访问如下:
在这里插入图片描述

5、FAQ

5.1 go.mod 为空

go: go.mod file not found in current directory or any parent directory. ‘go get’ is no longer supported outside a module.
答:执行如下命令即可:

go mod init mod

使用go env查看配置信息:

go env

在这里插入图片描述

5.2 超时

换个代理即可:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
set GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
# 设置不走 proxy 的私有仓库,多个用逗号相隔
go env -w GOPRIVATE=*.corp.example.com
go get -u gorm.io/gorm

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day02 -- docker

1.docker的介绍 Docker 是一个开源的应用容器引擎,基于 Go语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使…

●day 35 动态规划part01

第九章 动态规划part01 动态规划的类别 理论基础 动态规划下五步曲: 1、确定dp数组(dp table)以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、打印dp数组 代码随想录 斐波那契数 代码随想录 动态规划5部曲 cla…

高级语言源程序转换为可执行目标文件

将高级语言源程序转换为可执行目标文件的过程通常包括以下几个主要步骤: ​ 1. 预处理(Preprocessing): 由谁完成预处理器(cpp)操作处理源代码中的预处理指令(如宏定义、文件包含、条件编译等&…

Linux——动态卷的管理

确保已经设置了对应的动态卷的驱动(provisioner 制备器)基于动态驱动创建对应的存储类创建PVC (PVC 将会自动根据大小、访问模式等创建PV)Pod的spec 中通过volumes 和 volumemounts 来完成pvc 的绑定和pvc对应pv的挂载删除pod 不…

Linux网络编程(七)-TCP协议客户端及代码实现

1.TCP的客户端代码流程简述 这一章将为大家讲解Socket通信中客户端的实现过程,还是先上图,请大家了解客户端的步骤 可以看到,相比服务端,客户端的步骤简单的很多。事实上这种情况比较多,比如一个服务端会有多个客户端…

JMeter模拟并发请求

PostMan不是严格意义上的并发请求工具,实际是串行的,如果需要测试后台接口并发时程序的准确性,建议采用JMeter工具。 案例:JMeter设置20个并发卖票请求,查看后台是否存在超卖的情况 方式一:一共10张票&…

TrickMo 安卓银行木马新变种利用虚假锁屏窃取密码

近期,研究人员在野外发现了 TrickMo Android 银行木马的 40 个新变种,它们与 16 个下载器和 22 个不同的命令和控制(C2)基础设施相关联,具有旨在窃取 Android 密码的新功能。 Zimperium 和 Cleafy 均报道了此消息。 …

编写一个通用的i2c控制器驱动框架

往期内容 I2C子系统专栏: I2C(IIC)协议讲解-CSDN博客SMBus 协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析:注册篇内核提供的通用I2C设备驱动I2C-dev.…

时空数据时序预测模型: HA、VAR、GBRT、GCN、DCRNN、FCCF、ST-MGCN

HA (Historical Average) HA (Historical Average,历史平均模型) 是一种基础的时间序列预测方法,通常用于预测具有周期性或季节性规律的数据。它通过计算历史上同一时间段的平均值来预测未来值,假设数据会遵循某种周期性的变化模式。以下是对…

智能家居的“眼睛”:计算机视觉如何让家更智能

引言 在不远的未来,当我们走进家门,灯光自动亮起,空调已经调至最舒适的温度,甚至音乐也播放着我们最喜欢的歌曲。 这一切,都得益于智能家居系统的发展。而在这个系统中,计算机视觉技术扮演着至关重要的角色…

SpringBoot车辆管理系统:构建与优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

群晖通过 Docker 安装 MySQL

1. 打开 Docker 应用,并在注册表搜索 MySQL 2. 下载 MySQL 镜像,并选择版本 3. 在 Docker 文件夹中创建 MySQL,并创建子文件夹 4. 设置权限 5. 选择 MySQL 映像运行,创建容器 6. 配置 MySQL 容器 6.1 使用高权限执行容器 6.2 启…

scrapy 爬虫学习之【中医药材】爬虫

本项目纯学习使用。 1 scrapy 代码 爬取逻辑非常简单,根据url来处理翻页,然后获取到详情页面的链接,再去爬取详情页面的内容即可,最终数据落地到excel中。 经测试,总计获取 11299条中医药材数据。 import pandas as…

idea 2023 配置 web service

前言 能在网上查到的资料,都是比较老的,搞了一上午才配置好了环境 因此记录一下,服务你我他 我的环境: java 1.8,Idea2023.1 配置web service 服务端 直接新建一个java新项目 下载插件 添加框架支持 启动项目 配置web service 客户端 新建项目,下载三个插件的步骤和上面服务…

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件,用于支持MQTT(Message Queuing Telemetry Transport)协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…

【Hive】6-Hive函数、运算符使用

Hive函数、运算符使用 Hive内置运算符 概述 整体上,Hive支持的运算符可以分为三大类:关系运算、算术运算、逻辑运算。 官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF 也可以使用下述方式查看运算符的…

2024年AI 制作PPT新宠儿,3款神器集锦,让你的演示与众不同

咱们今儿聊聊最近超火的AI做PPT的工具。这年头,谁不想省事儿,少熬夜加班,多享受享受生活啊?所以,AI开始帮咱们搞定做PPT这种费时的活儿,我自然得好好研究研究。今天,我就给大家详细说说三款很火…

Linux下的进程解析(level 2)

目录 引言 pid解析 /proc 系统调用 fork :创建子进程 执行流分析 父子进程谁先运行 引言 在当今的信息技术时代,操作系统作为计算机系统的核心组件,承担着资源管理、任务调度等重要职责。Linux作为一种开源、高性能的操作系统&#xf…

第11篇:网络安全协议

目录 引言 11.1 安全套接字层(SSL)和传输层安全(TLS)协议 11.1.1 SSL/TLS 的工作原理 11.1.2 SSL/TLS 的应用场景 11.2 虚拟专用网(VPN)和 IP 安全协议(IPSec) 11.2.1 VPN 的工…

《深度学习》OpenCV EigenFaces算法 人脸识别

目录 一、EigenFaces算法 1、什么是EigenFaces算法 2、原理 3、实现步骤 1)数据预处理 2)特征提取 3)构建模型 4)识别 4、优缺点 1)优点 2)缺点 二、案例实现 1、完整代码 运行结果&#xff…