新聞中心
Go語言做Web應用開發(fā)的框架,哪一個更適合入門
Revel Web開源框架
成都創(chuàng)新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站建設、成都做網站、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的恭城網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
個高效的Go語言Web開發(fā)框架,?其思路完全來自 Java 的?Play Framework。
特點
熱編譯,簡單可選,同步(每個請求都創(chuàng)建自己的goroutine來處理。
Go語言Web框架:beego
一個用Go開發(fā)的應用框架,思路來自于tornado,路由設計來源于sinatra。
支持特性
MVC;
REST;
智能路由;
日志調試;
配置管理;
模板自動渲染;
layout設計;
中間件插入邏輯;
方便的JSON/XML服務;
golang的iris框架的模版如何相互引用?
1.用{{}}包圍的是變量,如 {{testName}} ,這表示把給定變量的值插入, {%%}這是塊元素 在faygo里叫tag,常見的有 for , if 等
2.如何在模板中定義變量, 平常我們在使用的模板的時候的常會有這樣的需要,在模板中要定義一個變量以方便前端邏輯的實現,在faygo模板中定義變量需要用到標簽{%set%}
使用方法
{#定義變量 newName #}
{% set newName = "hello faygo" %}
{#獲取變量newName的值#}
{{newName}}
定義用 tag set 取值就是上文所提到的{{}}取值
3.在模板中調用方法
這也是一個非常常見和有用的方法,在faygo中調用方法有兩種方式 , 一是在渲染模板時在faygo.Map在加入你要調用的方法 , 二是注冊一個全局的方法 (在faygo里叫filter過濾器),我們分別來看一下每個方法的實現
1) 在渲染模板時加入方法(render)
//在后端render時加入方法 testFunc
rErr := ctx.Render(200, switchDir+"index.html", faygo.Map{
"TITLE": title,
"testMap": map[string]string{"aaa": "111111"},
"testFunc": func(s string) string {
return s + " this is test func"
},
})
{#前端模板中調用#}
{{ testFunc("hello") }}
結果如下
hello this is test func
這種方法適合只用于此模板一個特殊方法 , 在其它功能中不通用 ,那么如果想定義一個方法全局都可以使用怎么辦,這里就需要注冊全局方法了(見下文)
2)注冊全局方法(過濾器)
如果想定義一個方法全局都可以使用怎么辦 ,這里就需要注冊一個方法
// pongo2 注冊一個全局過濾器,一般在程序啟動時init中注冊
//這里注冊了一個名叫testFilter的過濾器,指向TestFilterFunc方法
pongo2.RegisterFilter("testFilter", TestFilterFunc)
func TestFilterFunc(in, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
a := in.String() + " this is global filter"
return pongo2.AsValue(a), nil
}
在這里我們看到TestFilterFunc方法里接收參數和返回參數的類型是pongo2.Value和pongo2.Error
在注冊過濾器里方法的接收參數和返回參數是固定的這兩個不能改變
官網的話:
All functions’ parameters types must be of either your own type or of type *pongo2.Value(no matter how many) and functions must return one value of either type *Value or your own one.
那么我們返回數據時怎么返回? 在上面例子在我們看到了 AsValue 這個方法可以將我們數據返回,我們可以返回struct,map,array,string 等
在前端調用
{{ "hello" | testFilter }}
結果:
hello this is global filter
返回結構體:
type LoginUserInfo struct {
Username string `json:"username"`
Telephone string `json:"telephone"`
Email string `json:"email"`
Level int `json:"level"`
}
func TestFilterFunc(in, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
userInfo := LoginUserInfo{
Username: "userA",
Telephone: "123456",
Email: "[email protected]",
Level: 1,
}
return pongo2.AsValue(userInfo), nil
}
前端使用:
{#定義一個變量接收struct數據 #}
{% set uinfo = "" | testFilter %}
{#取用戶名字#}
{{ uinfo.Username }}
注意,如是 uinfo 只是一個struct 不是struct數組([]uinfo)時 在模板中不能使用{% for %} 使用也不會得到任何數據
如果uinfo是struct數組 在模板中for循環(huán)時不要使用 key,val in uinfo
如果uinfo是struct數組 uinfo = []userInfo{}
{#錯誤示例#}
{% for key,val in uinfo %}
{{val.Username}}
{% endfor %}
struct數據不能使用key,否則循環(huán)會執(zhí)行,但取不到任何數據
{# 正確示例 #}
{% for val in uinfo %}
{{val.Username}}
{% endfor %}
說一下返回map時 用for循環(huán)的情況,無論是否是map數組都可以用for key,val in uinfo 來遍歷數據
4. 在模板中字符串的連接和宏標簽的使用
在模板中有時我們會碰到這樣的需要:在模板中有幾個變量 ,我們想把這幾個變量連接在一起賦值給另一個變量以做其它操作
例: 在模板中有三個變量 host是域名,route是路由地址,param是參數 ,要把這三個變量連接起來賦值給另一個新的變量做urlencode操作。這應該怎么辦
因為在模板中使用 + 號連接變量時,程序會認為是數學運算,兩個字符串的連接值為0, 如果用內置的filter: join來連接需要傳入一個slice,但這三個只是字符串變量。
這個時候我們可能就要用到宏標簽了% macro %% endmacro %.
思路是這樣的,在宏標簽中定義一個宏(可以理解為一個方法),這個宏接收三個參數(參數個數看需求而定),在宏內返回連接的字符串
代碼:
{#定義三個變量#}
{% set host="" %}
{% set route="/aaa/bbb" %}
{% set param= "?id=123" %}
{#定義一個宏標簽接收三個參數,并返回。注意在宏標簽內如果換行,輸出的結果中也會有換行,在urlencode的時候也會把換行符進行轉義#}
{% macro joinUrl(paramA,paramB,paramC) %}{{paramA}}{{paramB}}{{paramC}}{% endmacro %}
hr
{#定義一個新變量調用宏方法,并將三個參數傳入#}
{% set newurl = joinUrl(host,route,param) %}
{#輸出newurl的值#}
{{newurl}}br
{#輸入出urlencode后的字符串#}
{{newurl|urlencode}}br
結果:
http%3A%2F%2F
在宏標簽在也可加入自定義的一些字符串如在上面的宏標簽返回結果中要加一個固定字符可以這樣寫:
{% macro joinUrl(paramA,paramB,paramC) %}{{paramA}}{{paramB}}{{paramC}}from=macro{% endmacro %}
golang 使用twig模板引擎,站在php的肩膀上!
和有些小伙伴一樣,本人是從php轉到了go,從事php時使用symfony框架一直享受其豐富的功能帶來的便利,轉到其他語言時比較直觀的感覺就是twig真強,為什么其他語言沒有擴展twig呢?
雖然前后端的開發(fā)模式,讓模板引擎這個東西慢慢淡去,但是有時候還是需要用到這種東西,所以就有了,go調用php實現twig模板引擎的想法。
原理,go 通過exec.Command調用php,通過STDIN,STDOUT 方式進行數據交互
go在初始化階段提供一些配置參數,比如模板引擎的為止,是否為開發(fā)環(huán)境等,php接收數據并初始化
初始換環(huán)境完畢后,當需要渲染模板,go再講模板文件和數據以json字符串的形式寫入STDIN告知php,
php接收到數據后,解析數據,選取指定的模板并渲染,然后通過STDOUT返回給go
這樣一次渲染就結束了
整理好的文件打包在github上了
如果喜歡就動動你的小手指點個贊,star一下吧!
golang有沒有好的開源游戲框架
Go作為近兩年迅速流行起來的編程語言始終致力于使事情簡單化。它并未引入很多新概念,而是聚焦于打造一門簡單的語言,讓開發(fā)者使用起來感覺異??焖偾液唵?。相信有意向深入學習Go語言的小伙伴都在研究Go的開源項目,今天我就把自己覺得不錯的6個Go開源項目推薦給大家,希望大家能獲得收獲和成長。
推薦一:kubernetes 【Star:44418】
Kubernetes基于Docker,其目的是讓用戶通過Kubernetes集群來進行云端容器集群的管理,而無需用戶進行復雜的設置工作。系統會自動選取合適的工作節(jié)點來執(zhí)行具體的容器集群調度處理工作。
推薦二:etcd 【Star:21408】
etcd是由CoreOS開發(fā)并維護鍵值存儲系統,它使用Go語言編寫,并通過Raft一致性算法處理日志復制以保證強一致性。目前,Google的容器集群管理系統Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
推薦三:deis 【Star:6093】
Deis是一個基于Docker和CoreOS的開源PaaS平臺,旨在讓部屬和管理服務器上的應用變得輕松容易。它可以運行在AWS、GCE以及Openstack平臺下。
推薦四:flynn 【Star:6936】
Flynn是一個使用Go語言編寫的開源PaaS平臺,可自動構建部署任何應用到Docker容器集群上運行。Flynn項目受到Y Combinator的支持,目前仍在開發(fā)中,被稱為是下一代的開源PaaS平臺。
推薦五:lime 【Star:13775】
相對上面的幾款Go語言在云端和服務器端之外,Lime則顯得比較特殊。Lime,則是一款用Go語言寫的桌面編輯器程序,被看做是著名編輯器Sublime Text的開源實現。
六:revel 【Star:10508】
Revel是一個高生產力的Go語言Web框架。Revel框架支持熱編譯,當編輯、保存和刷新源碼時,Revel會自動編譯代碼和模板;全棧特性,支持路由、參數解析、緩存、測試、國際化等功能。
新聞名稱:go語言框架模板 go語音框架
標題URL:http://fisionsoft.com.cn/article/dodoses.html