Gox 언어로 된 10 줄의 코드로 정적 파일 웹 서버를 구현하고 HTTP / HTTPS (SSL) 프로토콜 -GX37.2를 지원합니다.

또한 Gox 언어로 된 정적 페이지 및 리소스 파일을 기반으로 웹 서버를 구현하는 것도 매우 쉽습니다. 이제 정적 페이지 및 리소스 파일 (예 : 사진, 오디오, 비디오 등)을 지원하고 HTTPS도 지원하는 웹 서버 프레임 워크를 구현할 것입니다. (SSL 암호화 연결) 기능.

// 设置所需使用到的Go语言标准包中的http包与path/filepath的简称
http = net_http
filepath = path_filepath

// 设置http协议的服务端口为8080
portG = ":8080"

// 设置https/ssl协议的端口为8443
sslPortG = ":8443"

// 设置根路径
basePathG = `c:\web`

// muxG是用于存储Web服务器路由的全局变量
muxG = nil

// staticFS是存储静态页面处理器的全局变量
staticFS = nil

// serveStaticDirHandler函数用于处理静态页面请求
func serveStaticDirHandler(w, r) {
	// 如果staticFS没有初始化则初始化之
	// 这样页面文件的基本路径就是c:\web\pages
	if staticFS == nil {
		staticFS = http.FileServer(http.Dir(filepath.Join(basePathG, "pages")))
	}

	// 拼装一下本地路径到URL路径
	old := r.URL.Path
	name := filepath.Join(basePathG, "pages", path.Clean(old))

	// 获取本地文件的文件信息
	info, err := os.Lstat(name)

	if err == nil { // 如果文件存在
		if !info.IsDir() { // 如果不是目录,则直接在网页上显示该文件(或者提供下载)
			staticFS.ServeHTTP(w, r)
		} else { // 如果是目录
			// 如果该目录下存在index.html则显示它
			if tk.IfFileExists(filepath.Join(name, "index.html")) {
				staticFS.ServeHTTP(w, r)
			} else { // 否则网页返回404错误,表示网页未找到
				http.NotFound(w, r)
			}
		}
	} else { // 如果文件访问出错,则网页返回404错误,表示网页未找到
		http.NotFound(w, r)
	}

}

// 启动https/ssl服务
// 注意在c:\web目录下需要有与域名相匹配的的server.crt证书文件和server.key私钥文件
func startHttpsServer(portA) {
	pl("trying to start https server on %v...", portA)

	err := http.ListenAndServeTLS(portA, filepath.Join(basePathG, "server.crt"), filepath.Join(basePathG, "server.key"), muxG)
	if err != nil {
		pl("failed to start https server: %v", err)
	}

}

// 初始化Web路由器对象muxG
muxG = http.NewServeMux()

// 设置处理URL根路由的函数为静态页面处理函数
muxG.HandleFunc("/", serveStaticDirHandler)

// 在sslPortG指定的端口(本例中为8443)上启动https服务
go startHttpsServer(sslPortG)

pl("trying to start http server on %v...", portG)

// 在portG指定的端口(本例中为8080)上启动http服务
err := http.ListenAndServe(portG, muxG)

if err != nil {
	pl("failed to start http server: %v", err)
}


그런 다음 c : \ web \ pages 폴더를 만들고 index.html 또는 기타 파일을 저장하고 코드를 실행 한 다음 브라우저를 열어 https://127.0.0.1:8080/index.html을 방문하십시오. 다음과 같은 작동 효과 :

보시다시피 정적 페이지를 지원하는 웹 서버가 성공적으로 구축되었습니다. SSL 인증서를 성공적으로 신청하고 지침에 따라 지정된 폴더에 인증서와 개인 키 파일을 배치하면 인증서에 지정된 도메인 이름에 따라 포트 8443에 액세스하여 https 서비스를 사용할 수 있습니다.

전체 프로그램의 효과적인 코드는 12 줄을 넘지 않는데 단순화 할 수 있습니까? 극단적 인 작업으로 돌아가서 가장 간단한 버전에 가까운 코드를 살펴 보겠습니다!

staticFS = net_http.FileServer(net_http.Dir(path_filepath.Join(`c:\web`, "pages")))

func serveStaticDirHandler(w, r) {
	name = path_filepath.Join(`c:\web`, "pages", path.Clean(r.URL.Path))

	info, err = os.Lstat(name)
	if err == nil && (!info.IsDir() || tk.IfFileExists(path_filepath.Join(name, "index.html"))) {
		staticFS.ServeHTTP(w, r)
	} else {
		net_http.NotFound(w, r)
	}
}

muxG = net_http.NewServeMux()

muxG.HandleFunc("/", serveStaticDirHandler)

go plerr(net_http.ListenAndServeTLS(":8443", path_filepath.Join(`c:\web`, "server.crt"), path_filepath.Join(`c:\web`, "server.key"), muxG))

checkErrf("failed to start http server: %v", net_http.ListenAndServe(":8080", muxG))


기능은 이전 코드와 거의 동일하며 유효 코드는 약 10 줄로 줄어 듭니다.

노트:

  • Gox 언어는 Go 언어 (Golang)에서 탄생 한 오픈 소스 스크립팅 언어입니다. 해석 및 실행되지만 Go 언어에 비해 고급 언어에 더 가깝고 문법적 제약이 적습니다. 빠른 응용 프로그램에 편향된 언어이며 통합이라고도 할 수 있습니다. 수단;

  • Gox 언어에는 세 가지 주요 이점이 있습니다.

    • 첫째, Gox 언어 자체에는 실행 파일이 하나만있어 구성없이 녹색이며 다운로드 후 사용할 수 있습니다. Go 언어 환경을 설치할 필요가없고 컴파일 할 필요가 없습니다. 빠른 프로토 타입 제작 및 클라우드 서버의 원격 개발에 매우 ​​적합합니다.
    • 둘째, Gox는 Go 언어 표준 라이브러리에있는 대부분의 개체 및 메서드 함수를 직접 사용할 수 있으며, Go 언어가 수년 동안 축적 한 리소스 이점을 최대한 활용하기 위해 일반적으로 사용되는 우수한 타사 라이브러리도 많이 내장되어 있습니다.
    • 셋째, 다른 많은 주류 언어와 달리 Gox 언어는 GUI 그래픽 인터페이스 프로그래밍 문제를 해결하는 데 초점을 맞추고 있으며, 빠르고 효율적인 그래픽 인터페이스 개발을 직접 수행 할 수있는 Giu (imgui), LCL, Sciter 기반의 3 가지 그래픽 인터페이스 프로그래밍 라이브러리 세트가 내장되어 있습니다. (LCL 및 Sciter는 동적 링크 라이브러리 파일을 별도로 다운로드하고 실행 및 배포 할 때 첨부하기 만하면 됨), 특히 데모 프로토 타입 시스템 작성에 적합합니다.

스크립팅 언어로서 Gox 언어 성능은 Go 언어와 같은 컴파일 된 언어만큼 빠르지는 않지만 Gox 언어와 Go 언어 간의 밀접한 연결로 인해 Gox 언어로 작성된 스크립트는 컴파일 및 실행 후에 사용할 수있는 Go 언어 코드로 쉽게 다시 작성할 수 있습니다. Go는 속도 이점이 있습니다. 따라서 Gox 언어는 초기 Go 언어 디버깅에도 더 적합하며보다 직접적인 방법은 Go 언어와 동일한 구문을 사용하는 인터프리터 인 Gotx ( Gox 공식 웹 사이트에서도 다운로드 가능)를 사용하는 것입니다. 이는 통합으로 이해할 수 있습니다. Go 언어 표준 라이브러리와 많은 타사 라이브러리에서 해석되고 실행되는 Go 언어도 Go 언어 환경을 구축 할 필요가 없습니다. Gotx와 Gox의 차이점은 Gotx는 여전히 Go 언어의 문법을 따르고, 코드는 상대적으로 더 복잡하고 더 많은 제한이 있지만 기본적으로 컴파일 및 실행을 위해 Go 언어로 다시 작성할 때 비용이 들지 않는다는 것입니다.

GOX의 공식 웹 사이트는 여기에 . 당신은 또한 브라우저 검색 엔진에 직접 "GOX 언어"를 검색 할 수 있습니다. Github의 페이지는 여기에 . 당신은 여기에 많은 GOX 언어 학습 가이드 및 실제 적용 사례를 볼 수 있습니다.

추천

출처blog.csdn.net/weixin_41462458/article/details/107630164