2017-09-24 7 views
2

나는 Go 앱을 개발하기 위해 Atom을 사용하고 있습니다. Atom의 Linter는 이상한 경고를보고하고 있으며, 나는 그것이 어떻게 문제인지를 보지 못했습니다. 나는 경고를 영원히 무시해야합니까, 아니면 구현할 수있는 다른 방법이 있습니까?linter의 goconst 경고

func (a *App) PageEventCreate(w http.ResponseWriter, r *http.Request) { 

    switch r.Method { 
     case "GET": 
      // Serve the resource. 
     case "POST": 
      // Create a new record. 
     case "PUT": 
      // Update an existing record. 
     case "DELETE": 
      // Remove the record. 
     default: 
      // Give an error message. 
    } 

} 



func (a *App) PageLogin(res http.ResponseWriter, req *http.Request) { 
     switch r.Method { 
      case "GET": 
       // Serve the resource. 
      case "POST": 
       // Create a new record. 
      case "PUT": 
       // Update an existing record. 
      case "DELETE": 
       // Remove the record. 
      default: 
       // Give an error message. 
     } 

} 

: 내 "routes_pages.go"파일에서

a.Router.HandleFunc("/login", a.PageLogin) 
a.Router.HandleFunc("/register", a.PageRegister) 
a.Router.HandleFunc("/event/add", a.PageEventCreate) 

, 내가 그렇게 같이 정의 funcs 있습니다

나는 "app.go"파일에, 그래서 같은 경로를 가지고 나는 이런 식으로 많은 funcs 셋업을 가지고있다. 한 곳에서 어떤 경우 (GET, POST 등)에서도 쉽게 작업 할 수 있습니다.

Atom의 Linter에 문제가 있습니다. 다음과 같이 각 항목에 대한 경고를보고합니다.

Warning goconst 3 other occurrence(s) of "GET" found in: routes_pages.go:384:8 routes_pages.go:443:7 routes_pages.go:536:7 (goconst) 198:8 

이 경고는 여러 번 발생합니다. GET, PUT, DELETE 등으로 스위치/케이스의 모든 인스턴스에 대해 한 번; 거대한 목록.

답변

5

그것은 당신이있어 경고가 그냥 ...

나는 아톰의 경고를 '무시'하는 명백한 방법을 볼 수 없습니다, 그래서 난 그냥 더 심각한 경고에 좋은하지 않은 린터를 해제 같은 느낌 여러 장소에서 동일한 문자열 리터럴을 다시 사용합니다. 이는 문자열 리터럴이주의하지 않고 철자가 틀어지기 쉽기 때문에 문제가 될 수 있습니다. 해결책은 대신 상수를 사용하는 것입니다. 모든 (표준) HTTP 동사가 이미 http 패키지에서 내 보낸 상수이므로이 작업은 매우 쉽습니다. 문자열 리터럴을 업데이트하여 대신 contant 버전을 사용하십시오.

func (a *App) PageLogin(res http.ResponseWriter, req *http.Request) { 
     switch r.Method { 
      case http.MethodGet: 
       // Serve the resource. 
      case http.MethodPost: 
       // Create a new record. 
      case http.MethodPut: 
       // Update an existing record. 
      case http.MethodDelete: 
       // Remove the record. 
      default: 
       // Give an error message. 
     } 
} 

실수를 사용하면 오타를 방지 할 수 있습니다. 예 :

req, err := http.NewRequest("DLETE", ...) 

은 컴파일 타임 오류가 발생하지 것이다 (심지어는 프로그램의 로직의 나머지에 따라 런타임 오류가 발생하지 않을 수 있습니다) 하지만

req, err := http.NewRequest(http.MethodDlete, ...) 

가 실패합니다 엮다.