使用Golang打造自己的http服务器 1.0版本
package main import ( "io/ioutil" "net/http" "os" ) func main() { args := os.Args //获取输入的参数 /* 遍历参数 for i,s := range args{ print("--",i,"--",s,"\n") } */ //初始化端口以及检验用户输入 port := "8080" argsLength := len(args) if argsLength != 2 && argsLength != 1 { print("please enter the port\n") return } if argsLength == 2 { port = args[1] } portLength := len(port) if portLength != 4 { print("error port\n") return } //加载本地文件 loadPage("", "") var handle http.Handler //绑定host 开始服务 print("the server is starting...the port:", port, "\n") err := http.ListenAndServe("0.0.0.0:"+port, handle) print(err, "\n") print("please review your port") } func loadPage(path string, urlPath string) { var files []os.FileInfo if path == "" { path = "./" } if urlPath == "" { urlPath = "/" } //获取当前文件夹下所有文件包括文件夹 files, _ = ioutil.ReadDir(path) for _, f := range files { if f.IsDir() { //如果当前是一个文件夹 loadPage(appendPath(path, f.Name()), appendUrlPath(urlPath, f.Name())) } else { //绑定文件名 if path == "./" { loadHandle(path+f.Name(), urlPath+f.Name()) } else { loadHandle(path+"/"+f.Name(), urlPath+"/"+f.Name()) } } } } //文件名和文件绑定 func loadHandle(path string, urlPath string) { bytes, _ := ioutil.ReadFile(path) //print("\n", urlPath, "\n") http.HandleFunc(urlPath, func(writer http.ResponseWriter, request *http.Request) { writer.Write(bytes) }) } //拼接路径 func appendPath(prefixPath string, suffixPath string) string { if prefixPath == "./" { return prefixPath + suffixPath } return prefixPath + "/" + suffixPath } //拼接url->端口号后部分 func appendUrlPath(prefixUrlPath string, suffixUrlPath string) string { if prefixUrlPath == "/" { return prefixUrlPath + suffixUrlPath } return prefixUrlPath + "/" + suffixUrlPath }
启动方式 go run server.go 9977 端口可以不指定,默认 8080
go语言编译以后直接生成可执行文件(相对于系统,如果是在windows上编译就只能在windows上运行,Linux同理),不依赖go环境,类似gcc 编译,编译以后可以使用 cmd 窗口运行 server.exe 9977,或编写bat文件添加 server.exe 9977
采用相对路径,会先遍历和源码文件相同路径下的文件。
如同文件夹下有index.html 可以访问 http://127.0.0.1:9977/index.html
github:https://github.com/crazyjay97/GoLangLearn
使用Golang打造自己的http服务器 1.0版本的更多相关文章
- 动手打造轻量web服务器(二)路由
tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...
- 基于Nettty打造自己的MVC服务器
最近开始折腾Netty,体验下NIO编程.既然学习了,就要做点东西出来,要不然不容易掌握学到的东西.在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sam ...
- 新阿里云服务器从0开始配置为python开发环境
由于每次打开linux虚拟机比较麻烦,于是尝试一下云服务器,在阿里云领取了一个月的试用服务器,这里记录一下新服务器从0配置成python开发环境的步骤,以便以后配置新服务器时有个参考. 免费领取一个月 ...
- Windows Server 2003服务器.net4.0+IIS6.0的服务器,IE11浏览器访问的不兼容性
工作中发生了一件诡异的事情: 程序在Win7+.NET4.0+IIS7.5的服务器部署,IE8和IE11请求时,响应的样式都正常. 但是在美的同事反映说,Windows Server 2003服务器. ...
- Serv-U无法连接到服务器127.0.0.1,端口43958 FTP服务器不能启动
端口43958,这是Serv-U的本地管理端口,只允许127.0.0.1连接. 在出现“Serv-U无法连接到服务器127.0.0.1,端口43958”这个错误的时候,一般ftp软件无法自动启动 ...
- GIT用服务器上的版本强制覆盖掉本地的版本(转)
以前在机子上使用git下载了linux git版本库上的源代码,由于在阅读源代码的过程中,难免会对本地的文件进行修改,这样就导致本地文件与服务器上的文件版本不一致,我想做的就是用服务器上的版本强制覆盖 ...
- linux服务器查看redis版本:
linux服务器查看redis版本:redis-server-v
- 注册asp.net 4.0版本到IIS服务器中
在IIS服务器的运维的过程中,有时候部署asp.net网站发现未安装.net framework对应版本信息,此时就需要重新将.net framework对应的版本注册到IIS中,此处以重新注册.ne ...
- linux服务器升级python版本(python2与python3共存)
linux服务器升级python版本 ######################################## 第一步先安装sqlite-devel,因为python2也有这个,python3 ...
随机推荐
- JVM-Java内存区域
JVM虚拟机运行时数据区结构分为: 其中方法区和堆是所有线程共享的内存区域,而Java栈.本地方法栈.程序计数器是线程私有的. 我们详细介绍运行时数据区的各个区域及其作用. 程序计数器: 一块较小的内 ...
- Vue bus的使用(兄弟|非父子组件传值)-->可以使用一个空的Vue实例作为中央事件总线new Vue()
1.在main.js中注册全局的bus Vue.prototype.bus=new Vue(); 2.在组建中使用 子组建使用:this.bus.$emit('自定义事件名',data) metho ...
- SQL Server-聚焦事务、隔离级别详解(二十九)
前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...
- .net core2 笔记
资源: https://github.com/aspnet/home https://github.com/dotnet/cli https://www.cnblogs.com/billyang/p/ ...
- vue prop 传递数据
prop 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,需要通过子组件的 props 选项 一个组件默认可以拥有任意数量的 p ...
- Highchartsjs使用总结及实时动态刷新图
柱状图: $('#container').highcharts({ //突显红色柱: series: [ 523, 345, 785, 565, 843,{'color': 'red','y': 30 ...
- 牛客练习赛38 D 出题人的手环
链接 [https://ac.nowcoder.com/acm/contest/358/D] 题意 链接:https://ac.nowcoder.com/acm/contest/358/D 来源:牛客 ...
- es6在网页中模块引入的方法
前言: 以前,当然包括现在的大部分js引入,我们都是利用<script></script>这种全局的方式进行引入,当然这种弊端还是用的,比如这样直接利用script引入的话,会 ...
- iOS- 利用AFNetworking(AFN) - 实现文件断点下载
https://www.cnblogs.com/qingche/p/3500746.html 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3&g ...
- 【学习总结】GirlsInAI ML-diary day-5-布尔表达式/Bool
[学习总结]GirlsInAI ML-diary 总 原博github链接-day5 认识布尔表达式 简单来说,bool 就是对错判断. 给个条件,如果满足条件就返回True, 不满足条件就返回Fal ...