안녕하세요. 오늘은 Golang에서 지정한 포트번호로 localhost를 접속해야 할 때 방법을 공유해보려 합니다.
커맨드라인 인자 (Command-line arguments)는 프로그램의 실행을 매개변수화하는 일반적인 방법입니다.
예를 들어, go run hello.go는 go 프로그램에 run과 hello.go를 인자로 사용합니다.
os.Args는 커맨드라인 인자를 그대로 접근하는 방법을 제공합니다.
보통 "net/http"를 사용하여 간단한 핸들러 추가하여 서버를 실행시키실 때
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
})
http.ListenAndServe(":3000", nil)
}
위와 같은 형태로 포트번호가 고정인 형태 일텐데요.
커맨드라인 인자를 실험하려면 우선 go build로 바이너리를 빌드하는 것이 가장 좋습니다.
여기에서 "os" 패키지의 os.Args를 사용하여 코드에 추가해 보겠습니다.
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
printArgs := os.Args
printSlice := os.Args[1:]
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
})
fmt.Println(printArgs)
fmt.Println(printSlice)
http.ListenAndServe(":3000", nil)
}
이를 실행시켜 어떤 형태로 출력되는지 보죠.
printArgs 슬라이스의 첫번째 값은 프로그램의 경로이며, os.Args[1:]가 프로그램의 인자를 가집니다.
일반적인 인덱싱을 사용해 개별 인수들을 얻을 수 있다는 것을 확인할 수 있죠.
이걸 이용해서 만들어 볼 겁니다. 코드는 아래와 같습니다.
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
var port string = "8080" // init
if len(os.Args) == 2 {
port = os.Args[1]
}
argsWithProg := os.Args
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
})
fmt.Println(argsWithProg)
fmt.Println(os.Args[1])
http.ListenAndServe(":"+port, nil)
}
먼저 포트 번호를 붙이지 않은 상태에서 go run main.go 부분이 0번이기 때문에 그 뒤에 붙을 포트번호는 1번 인덱스가 되는 것을 이용한 방법입니다.
port 값을 3000으로 해서 뒤에 포트를 지정하지 않았을 시 기본 포트를 3000으로 하고, 뒤에 포트가 붙으면 지정한 포트 번호의 서버가 실행 될 수 있도록 하였습니다.
그런데 뒤에 포트가 붙을 때를 알려주어야 하는데 그 상황 때 os.Args가 2가 되기 때문에 len(os.Args) == 2 로 조건값을 넣었습니다.
의미 없는 것들을 없애면 아래와 같은 코드로 정리가 됩니다.
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
var port string = "8080" // init
if len(os.Args) == 2 {
port = os.Args[1]
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
})
http.ListenAndServe(":"+port, nil)
}
'프로그래밍(Web) > Golang' 카테고리의 다른 글
[바미] Go 1.18 Release Notes (0) | 2022.02.22 |
---|---|
[바미] Go 1.17 Release Notes (0) | 2022.02.16 |
[바미] Go - Logrus과 lumberjack을 사용하여 Log를 찍어보자! (2) | 2021.06.25 |
[바미] 디버그 모드 시 Version of Delve is too old for this version of Go 에러 뜰 때 해결 방법 (0) | 2021.06.08 |
[바미] go-callvis에 대해 알아보자! (0) | 2021.04.13 |