제 첫 번 째 실 용적 인 GO 언어 프로그램 입 니 다.

11737 단어 http정칙Go

우리 의 코드 에는 다음 과 같은 코드 가 매우 많다.
  UarrMain [0]: = AsMainType (edLayer, myStr, 'Layer', '구조 층 이름');
  UarrMain [1]: = AsMainType (edKind, myStr, 'Kind', '안정 제 종류');
.......
   UArrSub [0]: = AsSubType (myInt, True, 'seqnum', '번호');
  UArrSub [1]: = AsSubType (myStr, False, 'BoxNumber', '테스트 박스 번호');
  UArrSub [2]: = AsSubType (my Float, False, 'BoxWeigth', '상자 의 품질');
.....
나 는 지금 세 번 째, 네 번 째 인 자 를 추출 해 야 한다.
올 려 놓 아 라, 다음 에 컴퓨터 가 고장 나 면 다시 쓸 필요 가 없다.일 에 쓰 이 는 것 은 작업량 을 줄 일 수 있다.
배우 면서 쓴 것 이 비교적 서투르다. 문 서 를 여러 번 뒤 져 서 야 썼 다.
관건 은 정칙 이다. 물론 모든 상황 을 고려 하지 않 았 다.
이 언어 는 서버 를 위 한 개발 이기 때문에 GUI 에 좋 지 않 습 니 다.B / S 코드 를 함부로 만 들 었 습 니 다. 코드 는 다음 과 같 습 니 다.
 

  
  
  
  
  1. package main 
  2. import  
  3. (   
  4.   "io" 
  5.   "fmt" 
  6.   "regexp" 
  7.   "strings" 
  8.    "net/http" 
  9. ) 
  10.   
  11. const(  
  12.  SQL = "EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'AAAA', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CCCC', @level2type=N'COLUMN',@level2name=N'BBBB'" 
  13.  SQL2 = "EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'AAAA', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CCCC'" 
  14.  html =   
  15.   `<html> 
  16.    <head><title> <a/title></head> 
  17.    <body><form method = 'post'> 
  18.    TableName : <input type = "text" name = "tablename"></input> qs_Table   TableName,  TestRecordC21 <br></br> 
  19.      : <input type = "text" name = "tablename2"></input>    <br></br> 
  20.    <textarea rows="20" cols="120" name = "target"></textarea><br></br> 
  21.    <input type = "submit" value = "Submit"></input> 
  22.    %s 
  23.    </form> 
  24.    </body> 
  25.    </html>` 
  26. )   
  27.   
  28. func mySearch(str string) (result string) { 
  29.   result = "" 
  30.   regSub := regexp.MustCompile(`(?i)AsSubType\s*\(\w+\s*\,\s*(True|False)\s*\,\s*\'\s*(\w+)\s*\'\s*\,\s*\'\s*(.*?)\s*\'`) 
  31.   regMain := regexp.MustCompile(`(?i)AsMainType\s*\(\w+\s*\,\s*(\w+)\s*\,\s*\'\s*(\w+)\s*\'\s*\,\s*\'\s*(.*?)\s*\'`) 
  32.    
  33.   resultSub := regSub.FindAllStringSubmatch(str, -1) 
  34.   resultMain := regMain.FindAllStringSubmatch(str, -1) 
  35.    
  36.   for _, V := range resultSub { 
  37.       result = result + strings.Replace(strings.Replace(SQL, "AAAA", V[3],-1), "BBBB", V[2], -1) + 
  38.                 "<br></br>" + " GO " + "<br></br>" 
  39.  } 
  40.   
  41.   for _, V := range resultMain { 
  42.   result = result + strings.Replace(strings.Replace(SQL, "AAAA", V[3],-1), "BBBB", V[2], -1) + 
  43.                 "<br></br>" + " GO " + "<br></br>" 
  44.  } 
  45.   
  46.   return  
  47. } 
  48.   
  49. func Analyze(w http.ResponseWriter, r *http.Request) { 
  50.   if r.Method == "GET" { 
  51.     io.WriteString(w, strings.Replace(html, "%s", "", -1)) 
  52.  return  
  53.   } 
  54.    
  55.   if r.Method == "POST"{ 
  56.     str := r.FormValue("target") 
  57.  tablename := r.FormValue("tablename") 
  58.  tablename2 := r.FormValue("tablename2") 
  59.  if tablename == "" { 
  60.    io.WriteString(w, strings.Replace(html, "%s", "<div border = '1'>" +  
  61.       "TableName   " +"</div>", -1)) 
  62.    return 
  63.  } 
  64.  if tablename2 == "" { 
  65.    io.WriteString(w, strings.Replace(html, "%s", "<div border = '1'>" +  
  66.       "    " +"</div>", -1)) 
  67.    return 
  68.  } 
  69.  if str == "" { 
  70.    io.WriteString(w, strings.Replace(html, "%s", "<div border = '1'>" +  
  71.       "    " +"</div>", -1)) 
  72.   return 
  73.  } 
  74.   
  75.  SQLCMD := strings.Replace(html, "%s", "<div border = '1'>" +  
  76.       strings.Replace(mySearch(str), "CCCC", tablename, -1) +"</div>", -1) 
  77.     SQLCMD = SQLCMD + strings.Replace(strings.Replace(SQL2, "AAAA", tablename2, -1), "CCCC", tablename, -1) 
  78.  io.WriteString(w, SQLCMD) 
  79.   } 
  80. } 
  81.    
  82. func main(){  
  83.     fmt.Println("Open http://localhost:8888/extract") 
  84.   http.HandleFunc("/extract", Analyze) 
  85.   err := http.ListenAndServe(":8888", nil) 
  86.   if err != nil { 
  87.     fmt.Println(err.Error()) 
  88.   } 
  89. } 
  90.   

좋은 웹페이지 즐겨찾기