아래는 예제로 사용된 코드들 입니다. 같은 파일명으로 파일들 생성 하셔서 복붙 하시면 되겠습니다.
main.go
package main
import (
"fmt"
"github.com/phayes/freeport"
)
var (
gWebServerPort int
)
func main() {
port, portErr := freeport.GetFreePort()
if portErr != nil {
fmt.Println(portErr.Error())
return
}
gWebServerPort = port
webServ("127.0.0.1", gWebServerPort)
}
webserv.go
package main
import (
"fmt"
"net/http"
"time"
)
func webPageProc(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, ".\\www\\index.html")
}
func webServ(hostname string, servPort int) {
http.HandleFunc("/", webPageProc)
servAddr := fmt.Sprintf("%s:%d", hostname, servPort)
fmt.Println(servAddr)
// 웹페이지를 오픈하기 위한 고루틴
go func() {
// 1초간 딜레이
time.Sleep(1 * time.Second)
openMyWebPage()
}()
err := http.ListenAndServe(servAddr, nil)
//
if err != nil {
fmt.Println("웹 서버 실행 실패 ")
}
}
utils.go
package main
import (
"fmt"
"os/exec"
"strings"
"syscall"
)
func execCommandStart(name string, arg ...string) error {
cmd := exec.Command(name, arg...)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
err := cmd.Start()
return err
}
func execCommandRun(name string, arg ...string) error {
cmd := exec.Command(name, arg...)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
err := cmd.Run()
return err
}
func openWeb(url string) {
r := strings.NewReplacer("&", "^&")
stripURL := r.Replace(url)
err := execCommandStart("rundll32.exe", "url.dll,FileProtocolHandler", stripURL)
if err != nil {
// 오류 출력
fmt.Println(err.Error())
}
}
func openMyWebPage() {
addr := fmt.Sprintf("http://127.0.0.1:%d", gWebServerPort)
openWeb(addr)
}