Gin(Golang)におけるHTMLテンプレート記述方法

package main

import (
"github.com/gin-gonic/gin"
"net/http"
)

type C struct {
Id int
Name string
}

func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.tmpl")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"a": "a",
"b": []string{"b_todo1","b_todo2"},
"c": []C{{1,"c_mika"},{2,"c_risa"}},
"d": C{3,"d_mayu"},
"e": true,
"f": false,
"h": true,
})
})
router.Run(":8080")
}

 

<html>

{{/* コメント*/}}

{{/* ドット名前でgoから受け取れる */}}
<h1>{{.a}}</h1>

{{/* ループはrange, ドットで要素にアクセス, endで終了 */}}
<ul>
{{range .b}}
<li>{{.}}</li>
{{end}}
</ul>

{{/* 構造体は、ドットにメンバ名でアクセス */}}
{{range .c}}
<p>{{.Id}}<b>{{.Name}}</b></p>
{{end}}

{{/* 構造体、ループなしなら, ドット変数ドットメンバ */}}
<p>{{.d.Id}}<b>{{.d.Name}}</b></p>

{{/* if文 */}}
{{if .e}}
<p> e true </p>
{{else}}
<p> e false </p>
{{end}}

{{if .f}}
<p> f true </p>
{{else}}
<p> f false </p>
{{end}}

{{/* goソースでgは指定されていない */}}
{{if .g}}
<p> g true </p>
{{else}}
<p> g false </p>
{{end}}

{{/* withはifが真の場合、ドットに情報が設定される */}}
{{with .h}}
<p> h1 {{.}} </p>
{{end}}

{{/* withでなくif使うと、ドットアクセスで特定要素が出力されず */}}
{{if .h}}
<p> h2 {{.}} </p>
{{end}}

{{/* 変数宣言できる */}}
{{/* printf など関数使用可能。fmt.Printfのエイリアス */}}
{{$i := "ii"}}
<p>{{$i}}</p>
<p>{{printf "%s-%s" $i "iii"}}</p>

{{/* defineで定義することも可 */}}
{{define "J"}}
<p>jjj</p>
{{end}}

<hr>

{{/* defineで定義された呼び出しはtemplate */}}
{{template "J"}}

{{/* 不等号比較など、小なりはlt */}}
{{$k := 8}}
{{if lt 5 $k}}
<p> 8 large </p>
{{else}}
<p> 5 large </p>
{{end}}

</html>

 

Google偷偷升級了日文Google Now

之前Google Now擁有對答功能的版本據我能用的就只有英文版而已,而最近又多了個選擇,就是日文版。
以前就只有英文能夠對應用戶的說話自動進行各種操作或搜索,現在日文也可以了。
目前已經確定可以用的語音命令有
”〇〇〇に電話をかけて”(打電話給〇〇〇)
”〇〇〇にXXXとメッセージを送信して”(給〇〇〇發送信息,寫“XXX”)
”XXXをメモして”(筆記記下XXX)
”周辺のバス停”(周邊的bus站)
“映画名” (映画館/上映時間案内)(告訴它電影名會讀出該電影的信息)
“近くの映画館”(附近的電影院)
”朝8時にアラームをセット”(早上8點設好鬧鐘)
“ソニーの株価”(sony的股價)
“アプリ名”を起動(告訴它app名會幫你啟動)
“スポーツチーム名” (運動球隊的名字,例如曼聯)
“〇〇〇の年齢は?”(〇〇〇多少歲?)
“明日〇〇〇と予定に追加”(明天加上〇〇〇的行程)

我問他曼聯的情況,它還告訴我曼聯最近輸給了奧林比亞高斯0:2。

Google還沒有正式公開說明,不過應該也快了吧。到時應該會有更多可用的命令了。

PHP使用cURL時對404的判別方法

使用cURL時,假如使用以下代碼

if( curl_exec($ch) ){
    //success
} else {
    //error
}

就算那個網頁404,都會跑去success那邊。

需要使用以下設置

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FAILONERROR, TRUE); //處理失敗判斷
$onlineData = curl_exec($ch);

if( curl_exec($ch) ){
    //success
} else {
    //error
}

就能解決。

因為設置 CURLOPT_FAILONERROR 為 TRUE時,使用curl返回的http狀態碼大於400都會判定為處理失敗。

PHP 將datetime類型分割

$datetime = '2014-01-07 12:34:56';
$datetime1 = explode(' ', $datetime);
$date = explode('-', $datetime1[0]);
$year = $date[0];
$month = $date[1];
$day = $date[2];

//上面好像很多行
//使用正則表達式一行就好了,而其實我都不會正則表達式
list($year, $month, $day, $hour, $minute, $second) = preg_split('/[-: ]/', $datetime);
var_dump($year, $month, $day, $hour, $minute, $second);

PHP在switch中使用比較演算

這樣用也可以 

$flag = 0;
switch (true) {
    case ($flag > 0) : echo 1; break;
    case ($flag < 0) : echo 2; break;
    default : echo 3; break;
}
//輸出的應該是3