[Windows] Golang 1 사용해보기
12916 단어 go
소개
Windows에서 Pion/WebRtc를 사용하고 싶지만 약간의 Golang 코드를 작성했습니다.
그래서 이번에는 Golang을 작성해 봅니다.
환경
고패스
Go 설치 프로그램은 GOPATH 환경 변수를 자동으로 설정합니다.
하지만 PowerShell에서 "$GOPATH"처럼 사용할 수 없습니다.
"$ENV:GOPATH"처럼 작성해야 합니다.
모듈
README에 따르면 Pion/WebRtc 예제를 실행하려면 "GO111MODULE=on go get ~"을 실행해야 합니다.
하지만 그렇게 하면 오류가 발생합니다.
GO111MODULE=on : The term 'GO111MODULE=on' is not recognized as the name of a cmdlet, function, script file, or operabl
e program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
...
ver.1.13부터 GO111MODULE 환경 변수가 설정되지 않았기 때문입니다.
그리고 대신 "mod init로 이동"해야 합니다.
Pion/WebRtc 예제를 실행하려면 Pion/WebRtc를 복제하고 실행하기만 하면 됩니다.
git clone https://github.com/pion/webrtc.git $ENV:GOPATH/src/github.com/pion/webrtc
cd $ENV:GOPATH/src/github.com/pion/webrtc/examples
go run examples.go --address localhost:8080
웹 애플리케이션을 만들어 보세요.
새 프로젝트 만들기
문서에 따르면 GOPATH에서 새 프로젝트를 만들어야 합니다.
mkdir $ENV:GOPATH/src/sample/webappsample
cd $ENV:GOPATH/src/sample/webappsample
go mod init sample/webappsample
gitignore.io으로 .gitignore 파일을 만듭니다.
main.go
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
방화벽
이제 한 가지 문제가 있습니다.
"go run main.go"를 실행할 때마다 방화벽 보안 경고가 표시됩니다.
실행 파일 경로는 항상 새로 생성되기 때문입니다.
이를 방지하기 위해 첫 번째 "ListenAndServe"인수를 "localhost:8080"으로 변경할 수 있습니다.
main.go
...
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
하지만 그렇게 하면 IP 주소로 접속할 수 없습니다.
따라서 "0.0.0.0:8080"과 같이 변경하면 첫 번째 문제가 다시 발생합니다 :(
아마도 다른 기기에서 접근하고 싶을 때 먼저 빌드를 해야 할 것 같습니다.
HTML 파일 표시
index.html
<!DOCTYPE html>
<html>
<head>
<title>Go Sample</title>
<meta charset="utf-8">
</head>
<body>
<div>Hello world!</div>
</body>
</html>
main.go
package main
import (
"html/template"
"log"
"net/http"
"path/filepath"
"sync"
)
type templateHandler struct {
once sync.Once
filename string
templ *template.Template
}
func (t *templateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// "sync.Once" executes only one time.
t.once.Do(func() {
// "Must()" wraps "ParseFiles()" results, so I can put it into "templateHandler.templ" directly
t.templ = template.Must(template.ParseFiles(filepath.Join("templates", t.filename)))
})
t.templ.Execute(w, nil)
}
func main() {
// In this sample, "ServeHTTP()" is called twice.
// The second time is for loading "favicon.ico"
http.Handle("/", &templateHandler{filename: "index.html"})
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
정적 파일 로드
CSS, JavaScript 등과 같은 정적 파일을 로드하는 것은 어떻습니까?
"http.Handle()"을 다시 추가해야 합니다.
main.go
...
func main() {
// load templates/css/*
http.Handle("/css/", http.FileServer(http.Dir("templates")))
// In this sample, "ServeHTTP()" is called twice.
// The second time is for loading "favicon.ico"
http.Handle("/", &templateHandler{filename: "index.html"})
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
Reference
이 문제에 관하여([Windows] Golang 1 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/masanori_msl/windows-try-golang-1-138b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)