使用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 ...
随机推荐
- CF429E Points and Segments 构造、欧拉回路
传送门 如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\) ...
- React-记connect的几种写法
第一种 最普通,最常见,delllee和官网第写法. import React, { Component } from 'react'; import {connect} from 'react-re ...
- https证书过期问题
这个是以前配置证书的文章,同时更新证书的有效的一篇文章 最近网站的https证书过期了,造成无法对外提供服务,怀疑是当时配置的自动更新没有起作用. 然后去后台更新https证书,却遇到了问题,使用的具 ...
- [UWP]如何使用代码创建DataTemplate(或者ControlTemplate)
1. 前言 在UWP中DataTemplate是一个十分重要的功能,并且几乎无处不在,例如DataGrid中的DataGridTemplateColumn: <controls:DataGrid ...
- H5 65-清除浮动方式一
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Contest1692 - 2019寒假集训第三十一场 UPC 11075 Problem D 小P的国际象棋
非常简单的单点修改+区间加+区间查询.我用的是最近刚学的区间修改版本树状数组. 直接维护即可,注意修改后的单点值已经不是a[i],或者b[i],要通过区间查询求单点.不然是错的. 区间修改版本树状数 ...
- p211有界自共轭算子T是实数集合的子集
对条件 取非 是 ∉谱集合的实数 才对 现在是 入 属于正则点集 他 然后 又说T 的谱是实数 这不矛盾吗 这里根据 必要性 推出 蓝色和红色矛盾 矛盾就是 这是谱点 然 ...
- Python爬虫——用BeautifulSoup、python-docx爬取廖雪峰大大的教程为word文档
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 廖雪峰大大贡献的教程写的不错,写了个爬虫把教程保存为word文件,供大家方便下载学习:http://p ...
- 【Python3练习题 016】 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
这题得倒着推.第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 - 1 = 1,可得 p = 4.以此类推,即可手算出. 代码思路为: ...
- babel (二) update to v7
一.rootmode In 7.1, we've introduced a rootMode option for further lookup if necessary. 二.Remove prop ...