2015-09-26 56 views
1

我該如何寫這個塊更緊湊?我認爲寫很多簡單的代碼是很多的。如何編寫這個(詳細)Golang代碼更有效率/緊湊?

// GetSegments Retrieve segments near given coordinate. 
func GetSegments(w http.ResponseWriter, r *http.Request) { 
    near := r.FormValue("near") 
    givenCoordinate := strings.Split(near, ",") 

    lat, _ := strconv.ParseFloat(givenCoordinate[0], 32) 
    lon, _ := strconv.ParseFloat(givenCoordinate[1], 32) 

    lat32 := float32(lat) 
    lon32 := float32(lon) 

    coord := Coordinate{ 
     Latitude: lat32, 
     Longitude: lon32} 

    fmt.Println(coord) 
} 

的代碼塊是通過Web API調用: http://localhost:8080/segments?near=14.52872,52.21244

我真的很喜歡圍棋,但這是,如果我使用它的權利,我想知道的事情之一..

+0

爲什麼要顯式轉換爲float32? – favoretti

+0

@favoretti:'strconv.ParseFloat'返回類型'float64'。不要鍵入'float32':'func ParseFloat(s string,bitSize int)(f float64,err error)'。 Go需要明確的轉換。 – peterSO

+0

@peterSO我知道,但爲什麼不把座標保存在'float64'中,這就是我的意思。 – favoretti

回答

3

最重要的是你編寫的代碼能夠產生正確的結果和有用的錯誤信息。檢查錯誤。例如,

type Coordinate struct { 
    Latitude float32 
    Longitude float32 
} 

// GetSegments Retrieve segments near given coordinate. 
// http://localhost:8080/segments?near=14.52872,52.21244 
func GetSegments(w http.ResponseWriter, r *http.Request) (Coordinate, error) { 
    const fnc = "GetSegments" 
    near := r.FormValue("near") 
    if len(near) == 0 { 
     return Coordinate{}, fmt.Errorf("%s: near coordinates missing", fnc) 
    } 
    latlon := strings.Split(near, ",") 
    if len(latlon) != 2 { 
     return Coordinate{}, fmt.Errorf("%s: near coordinates error: %s", fnc, near) 
    } 
    lat, err := strconv.ParseFloat(latlon[0], 32) 
    if err != nil { 
     return Coordinate{}, fmt.Errorf("%s: near latitude: %s: %s", fnc, latlon[0], err) 
    } 
    lon, err := strconv.ParseFloat(latlon[1], 32) 
    if err != nil { 
     return Coordinate{}, fmt.Errorf("%s: near longitude: %s: %s", fnc, latlon[1], err) 
    } 
    coord := Coordinate{ 
     Latitude: float32(lat), 
     Longitude: float32(lon), 
    } 
    fmt.Println(coord) 
    return coord, nil 
} 
+0

定義一個全局空的'Coordinate {}'是否合適,並在錯誤的情況下返回它,或者它通常不可取(或無用)? – coredump

+0

@coredump,由於該值是通過堆棧返回的,因此它不會更快/更高的內存效率。 – kostya

相關問題