ror/sinatra 나 express.js 처럼 우아한 routing쓰고 싶은데
연습삼아 만들어보자는 생각에 서툰 코딩을 시작
/user/:userid 인 경우 \/user\/([^\/]+)\/? 이런 식으로 우아하게 정규식 치환을 했으면 했는데
string 패키지도 좀 볼겸. 단순하게 문자열 조작+뺑뺑이로 구현했다.
https://gist.github.com/1827639
웹에서 코드실행
에서 각각 :으로 시작하는 인자값을 뽑아낸다.
정적 타이핑 언어치고 재미있네. 에휴 Dennis Ritchie옹 생각에 눙무리 ;;ㅅ;;
연습삼아 만들어보자는 생각에 서툰 코딩을 시작
/user/:userid 인 경우 \/user\/([^\/]+)\/? 이런 식으로 우아하게 정규식 치환을 했으면 했는데
string 패키지도 좀 볼겸. 단순하게 문자열 조작+뺑뺑이로 구현했다.
https://gist.github.com/1827639
package mainimport "fmt"import "strings"var routes = []string{"/user/:id/friends/:friendsId","/scrapbook/:scrapbookid/scrap/:scrapid","/"}func getParams(url string) map[string]string {for idx,_:=range routes {format := routes[idx]urlToken := strings.Split(url, "/")formatToken := strings.Split(format, "/")/* match pattern */if len(urlToken)==len(formatToken) && len(formatToken)>0 {params := make(map[string]string)match := truefor i,v:=range formatToken {if len(v)>0 && v[0:1] == ":" {params[v[1:]]=urlToken[i]} else if v!=urlToken[i] {match =false}}if match {return params}}}return nil}func main() {for i,v:=range getParams("/scrapbook/1ABCDE/scrap/401") {fmt.Printf("[%s:%s]",i,v)}fmt.Println("")for i,v:=range getParams("/user/spectrum/friends/cid") {fmt.Printf("[%s:%s]",i,v)}fmt.Println("")for i,v:=range getParams("/root") {fmt.Printf("[%s:%s]",i,v)}fmt.Println("")}
웹에서 코드실행
/user/:id/friends/:friendsId/scrapbook/:scrapbookid/scrap/:scrapid
에서 각각 :으로 시작하는 인자값을 뽑아낸다.
정적 타이핑 언어치고 재미있네. 에휴 Dennis Ritchie옹 생각에 눙무리 ;;ㅅ;;
댓글
댓글 쓰기