2015-11-18

(Go) 웹서비스에 POST 요청으로 값 넘겨서 처리하기



import (
    "net/http"
    "net/url"
)
 
func reqPost() {
    postUrl := "http://example.com/test"
    values := make(url.Values)
    values.Set("name", "HongGilDong")
    values.Set("age", 31)
    req, _ := http.PostForm(postUrl, values)
    defer req.Body.Close()
}


(beego) JSON Response 작성하기



  • 샘플 코드
    func (c *HappeningController) Get() {
     data := map[string]interface{}{
      "test":  "test",
      "num":   23,
      "array": []string{"one", "two"},
     }
     c.Data["json"] = &data
     c.ServeJson()
    }
  • 결과
    {
        "test":"test",
        "number": 23,
        "array":["one", "two"]
    }

2015-11-13

(beego) router 작성시 주의할 점



  • router 작성시에 하나의 컨트롤러에 여러 URL 을 매핑하는 경우, urlfor 가 예측할 수 없을 정도로 비정상적으로 작동한다. 예를 들어, 다음과 같이 router 를 작성했다고 하자.
        ...
    
        beego.Router("/mgmt/user", &c_mgmt.UserController{}, "get:Index")
        beego.Router("/mgmt/user/:page", &c_mgmt.UserController{}, "get,post:Index")
        beego.Router("/mgmt/user/:page/:s_item/:val", &c_mgmt.UserController{}, "get:Index")
    
        ...
  • View 의 템플릿에서
    {{urlfor ""mgmt.UserController.Index" "1"}}
    를 작성한 경우, /mgmt/user/1 이 호출되어야 겠지만, 실제로는 전혀 다른 값이 호출된다는 것이다. 반면, URL을 호출한 경우에는 매핑된 컨트롤러가 제대로 실행된다. 그러므로, 정상적인 동작을 위해서는 URL 과 컨트롤러는 1:1 로 매핑해야 한다.

2015-11-03

(Go) Get local IP addresses


  • Sample Code
    myip.go
    package main
     
    import (
     "fmt"
     "net"
    )
     
    func main() {
     addrs, _ := net.InterfaceAddrs()
     
     for _, addr := range addrs {
      if addr.Network() == "ip+net" {
       if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
        if ipnet.IP.To4() != nil {
         fmt.Println(ipnet.IP.String())
        }
       }
      } else if addr.Network() == "ip" {
       if addr.String() != "0.0.0.0" {
        fmt.Println(addr.String())
       }
      }
     }
    }