January 1st, 2015
前言:
新年新希望…. 繼續寫程式啊…. 之後要把Go Web Server逐漸到真的能使用的部分.
筆記:
- [Golang][Heroku] 將buildpack upgrate到Go1.4
- 最近的需求,將Go拿出來重新的翻了一下.除了之前發現沒有更新到Go1.4之外.也發現原來之前透過martini寫出的REST server並不完全是JSON的格式.於是最近開始把Go-herokuo-server翻了一下.
- 以下紀錄如何將你的heroku更新到1.4
- 重新跑godep
- 記得將godep目錄下的檔案全部一併更新上去
- 或是可以參考kr/heroku-buildpack-go
- [Golang]關於Json資料的Get/Post處理
- 發現martini原先雖然有做REST API但是並沒有針對JSON資料來處理.而要處理JSON的資料其實在Go裡面還是有一些地方要處理.
- 幾個值得注意的地方如下:
- 從網頁抓來的資料可以由http.Request.Form或是http.request.Body抓來處理.
- Request.Form 資料可以從 curl -X POST -d “DATA” “http://address”
- Request.Body 資料不僅僅可以抓 curl的資料,也可以抓取http.NewRequest(“POST”, url, bytes.NewBuffer(jsonStr))來的資料.
- 抓取來的資料都可以透過map interface來接,再慢慢去處理.
- 如果JSON資料比較複雜類似 { A:a1 B:[ { B1: b1, B2:b2}]} 就透過以下邏輯來解決
- 先透過第一層map拿到B內容 [ { B1: b1, B2:b2}]
- 透過 array interface拿到 { B1: b1, B2:b2},記住內縙 ary[0]
- 再透過map接過來繼續解出其他的內容.
- 從網頁抓來的資料可以由http.Request.Form或是http.request.Body抓來處理.
- 參考資料:
- 以下把部分程式碼擷取出來:
//資料來源 //curl -X POST -d "{ \"name\"" : \"that\", \"num\": \"3\"}ttp://localhost:5000/fruits" // 透過Request.Form的資料 r.ParseForm() var dat map[string]interface{} for key, _ := range r.Form { fmt.Println("r.form") fmt.Printf("key = ") fmt.Println(key) err := json.Unmarshal([]byte(key), &dat) if err != nil { fmt.Println(err.Error()) } } for key, value := range dat { fmt.Println("Key:", key, "Value:", value) } // 透過Request.Body再把Json資料Unmarshall body, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Println("read error") } fmt.Println(body) fmt.Println(reflect.TypeOf(body)) fmt.Println(string(body)) var dat map[string]interface{} err = json.Unmarshal(body, &dat) if err != nil { fmt.Println("Unmarshal error") } //Handle Data Like ////Data: `{"name":"test1", "num":"2", "data": [{"data1": "value1", "data2": "value2" }] }` err = json.Unmarshal(body, &dat) if err != nil { fmt.Println("Unmarshal error") } //Get specific colume as array interface //[{"data1": "value1", "data2": "value2" }] map_body := dat["data"].([]interface{}) var dat2 map[string]interface{} // Get first one from array (dat2 is map) //{"data1": "value1", "data2": "value2" } dat2 = map_body[0].(map[string]interface{}) //Handle dat2 as map to get rest data.
- [iOS] 寫了Server方面,當然要寫client的方式
- 讀取很方便,NSURLConnection就可以處理,而且抓來的Json會直接放進map處理
- 寫入有一點小複雜,必須寫使用Diectionary處理你要處理的資訊後,再透過NSURLConnection來啟動.
- (IBAction)JsonSend:(id)sender { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1:5000/fruits2"]]; //透過NSDictionary放入資料,右邊是Key左邊是Value NSDictionary *requestData = [[NSDictionary alloc] initWithObjectsAndKeys: @"Banana", @"name", @"3", @"num", nil]; NSError *error; NSData *postData = [NSJSONSerialization dataWithJSONObject:requestData options:0 error:&error]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:postData]; NSURLResponse *requestResponse; NSData *requestHandler = [NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:nil]; NSString *requestReply = [[NSString alloc] initWithBytes:[requestHandler bytes] length:[requestHandler length] encoding:NSASCIIStringEncoding]; NSLog(@"requestReply: %@", requestReply); } - (IBAction)JsonGet:(id)sender { NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://127.0.0.1:5000/fruits/1"]]; __block NSDictionary *json; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"Async JSON: %@ id=%@", json, json[@"id"]); }]; }
- [Eclipse][Java] 復原整個Java Srping Boot的開發環境
- 前言:
- 之前因為Eclipse ADT從22.x更新到了23,使得我的eclipse無法正確跑Android.看了許多人的建議.看來只能夠把Eclipse砍掉重裝.不過也讓我的Java Spring Boot整個開發環境就跑掉了.
- 這一篇記錄一下會遇到哪些問題,並且把問題的解決方式也記錄一下.
- 問題一: JRE環境跑掉
- 問題內容
- 無法正確的編譯Java Spring的專案
- 解決方法:
- 由於之前在跑Spring專案的時候,有使用到Java8的一些函示.所以有裝Java8.JRE跑掉會有以下的狀況.
- [Preference]->[Java]->[Installed JREs] 發現是空的
- 按下 [Add]->[Stardard VM]->Directory 選擇 [Library/Java/JavaVirtualMachines/JDKversion]
- 問題內容
- 問題二: 無法執行junit
- 問題內容:
- 按下junit來跑測試的部分的時候,發現都會出現“An internal error occured during Launching”
- 解決方式:
- 這邊花了一點時間才解決問題.
- Go to help
- Install New Software
- Work with: Juno
- Programming languages (expand it)
- Install “Eclipse Java Development Tools””
- Restart
- 參考這裡
- 這邊花了一點時間才解決問題.
- 問題內容:
- 順便在三地記錄一下,要如何跑Java Spring Boot專案
- 專案:
- [Run] -> [Java Application] -> Machining Item -> [Application]
- 測試部分:
- 指向該junit檔案(*.java) [Run]->[Junit Test]
- 專案:
- 前言: