本教程介紹了使用 Godatabase/sql及其標準庫中的包訪問關系數據庫的基礎知識。

創新互聯從2013年開始,是專業互聯網技術服務公司,擁有項目成都做網站、成都網站設計、成都外貿網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元靜樂做網站,已為上家服務,為靜樂各地企業和個人服務,聯系電話:18982081108
您將使用的database/sql包包括用于連接數據庫、執行事務、取消正在進行的操作等的類型和函數。
在本教程中,您將創建一個數據庫,然后編寫代碼來訪問該數據庫。您的示例項目將是有關老式爵士樂唱片的數據存儲庫。
首先,為您要編寫的代碼創建一個文件夾。
1、打開命令提示符并切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創建一個名為 data-access 的目錄。
3、創建一個模塊,您可以在其中管理將在本教程中添加的依賴項。
運行go mod init命令,為其提供新代碼的模塊路徑。
此命令創建一個 go.mod 文件,您添加的依賴項將在其中列出以供跟蹤。
注意: 在實際開發中,您會指定一個更符合您自己需求的模塊路徑。有關更多信息,請參閱一下文章。
GO語言(二十五):管理依賴項(上)
GO語言(二十六):管理依賴項(中)
GO語言(二十七):管理依賴項(下)
接下來,您將創建一個數據庫。
在此步驟中,您將創建要使用的數據庫。您將使用 DBMS 本身的 CLI 創建數據庫和表,以及添加數據。
您將創建一個數據庫,其中包含有關黑膠唱片上的老式爵士樂錄音的數據。
這里的代碼使用MySQL CLI,但大多數 DBMS 都有自己的 CLI,具有類似的功能。
1、打開一個新的命令提示符。
在命令行,登錄到您的 DBMS,如下面的 MySQL 示例所示。
2、在mysql命令提示符下,創建一個數據庫。
3、切到您剛剛創建的數據庫,以便您可以添加表。
4、在文本編輯器的 data-access 文件夾中,創建一個名為 create-tables.sql 的文件來保存用于添加表的 SQL 腳本。
將以下 SQL 代碼粘貼到文件中,然后保存文件。
在此 SQL 代碼中:
(1)刪除名為album表。 首先執行此命令可以讓您更輕松地稍后重新運行腳本。
(2)創建一個album包含四列的表:title、artist和price。每行的id值由 DBMS 自動創建。
(3)添加帶有值的四行。
5、在mysql命令提示符下,運行您剛剛創建的腳本。
您將使用以下形式的source命令:
6、在 DBMS 命令提示符處,使用SELECT語句來驗證您是否已成功創建包含數據的表。
接下來,您將編寫一些 Go 代碼進行連接,以便進行查詢。
現在你已經有了一個包含一些數據的數據庫,開始你的 Go 代碼。
找到并導入一個數據庫驅動程序,該驅動程序會將您通過database/sql包中的函數發出的請求轉換為數據庫可以理解的請求。
1、在您的瀏覽器中,訪問SQLDrivers wiki 頁面以識別您可以使用的驅動程序。
2、使用頁面上的列表來識別您將使用的驅動程序。為了在本教程中訪問 MySQL,您將使用 Go-MySQL-Driver。
3、請注意驅動程序的包名稱 - 此處為github.com/go-sql-driver/mysql.
4、使用您的文本編輯器,創建一個用于編寫 Go 代碼的文件,并將該文件作為 main.go 保存在您之前創建的數據訪問目錄中。
5、進入main.go,粘貼以下代碼導入驅動包。
在此代碼中:
(1)將您的代碼添加到main包中,以便您可以獨立執行它。
(2)導入 MySQL 驅動程序github.com/go-sql-driver/mysql。
導入驅動程序后,您將開始編寫代碼以訪問數據庫。
現在編寫一些 Go 代碼,讓您使用數據庫句柄訪問數據庫。
您將使用指向結構的指針sql.DB,它表示對特定數據庫的訪問。
編寫代碼
1、進入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創建數據庫句柄。
在此代碼中:
(3)使用 MySQL 驅動程序Config和FormatDSN類型以收集連接屬性并將它們格式化為連接字符串的 DSN。
該Config結構使代碼比連接字符串更容易閱讀。
(4)調用sql.Open 初始化db變量,傳遞 FormatDSN。
(5)檢查來自 的錯誤sql.Open。例如,如果您的數據庫連接細節格式不正確,它可能會失敗。
為了簡化代碼,您調用log.Fatal結束執行并將錯誤打印到控制臺。在生產代碼中,您會希望以更優雅的方式處理錯誤。
(6)調用DB.Ping以確認連接到數據庫有效。在運行時, sql.Open可能不會立即連接,具體取決于驅動程序。您在Ping此處使用以確認 database/sql包可以在需要時連接。
(7)檢查來自Ping的錯誤,以防連接失敗。
(8)Ping如果連接成功,則打印一條消息。
文件的頂部現在應該如下所示:
3、保存 main.go。
1、開始跟蹤 MySQL 驅動程序模塊作為依賴項。
使用go get 添加 github.com/go-sql-driver/mysql 模塊作為您自己模塊的依賴項。使用點參數表示“獲取當前目錄中代碼的依賴項”。
2、在命令提示符下,設置Go 程序使用的DBUSER和DBPASS環境變量。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目錄中的命令行中,通過鍵入go run來運行代碼。
連接成功了!
接下來,您將查詢一些數據。
前端框架越來越豐富,前后端分離已經是大多數軟件團隊采取的模式了。vue使用的場景也越來越多。
go本來使用template模板來進行前端的表現,現在可以用vue來分擔很大一部分工作了。
通常直接使用go語言寫后端,然后使用靜態模板加載渲染前端,前端獲取后端提供的數據是使用{{ }}符號,2個套在一起的花括號。這個也是vue使用的數據表現方式。
如果go+vue來協同工作的話,需要對vue進行一點設置。比如把{{ }}的方式改為[[ ]]的方式。
首先我們要知道,vue的使用,需要在頁面中加載vue.js或vue.min.js
純靜態網頁使用vue是這樣的(給個html例子)
然后我們實現一個go的簡單web服務和模板頁面
這個go服務器通過端口 1989 展示服務器頁面,提供了一個靜態文件路徑 htmlpage,我們把vue.js和index.html文件都放置在htmlpage路徑里。
go服務器還用模板給前臺頁面提供了一個News結構的數據,數據包括:Title,Content,Author的值。
在index.html頁面中,加載vue.js的時候需要帶上靜態路徑 htmlpage
在 new 一個 vue 變量的時候,必須有一句來設置包裹數據的符號,我們這里設置這個符號為[[ ]]
同時,所有需要由 vue 渲染的數據,都寫成類似這樣的樣子
在 go + vue 方式下的完整模板文件 index.html
此頁面中{{ }}包裹的數據是由go從后端提供的數據( 例如:{{.Title}}),而[[ ]]包裹的數據,是vue渲染的數據。
只是把 Vue里的數據,改為由go后端提供即可。
好吧,作者已經在向月亮示愛了。呵呵 _
運行一下程序,看修改模板后的效果。
近期正在探索前端、后端、系統端各類常用組件與工具,對其一些常見的組件進行再次整理一下,形成標準化組件專題,后續該專題將包含各類語言中的一些常用組件。歡迎大家進行持續關注。
本節分享一個基于Go語言的HTML和CSS網站生成器 hugo ,它針對速度、易用性和可配置性進行了優化。Hugo 獲取一個包含內容和模板的目錄,并將它們呈現為一個完整的 HTML 網站。Hugo 依賴于 Markdown 文件和元數據的前端,你可以從任何目錄運行 Hugo。這適用于您沒有特權帳戶的共享主機和其他系統。例如我們日常編寫一些博客文章,進行快速生成一套靜態頁面進行分享時可以使用它來進行生成一套靜態頁面作為我們的博客部署基礎。
它支持大量的主題模板,我們可以通過 進行選擇相關的主題使用,有興趣的小伙伴可以進行深入研究一下
可視化是監控的目標之一,沒有一個好的展示,再多的數據我們也很難分析。這里主要對Grafana進行介紹,前面我們雖然也展示過Grafana數據可視化的界面,但是并沒有深入介紹。
書本介紹了Prometheus自帶的控制臺界面,開啟這個功能只需要在啟動命令中添加相關的參數。但是,用這個方法作圖的效率實在是太低了。實際使用中,都是通過配合Grafana一起使用的。關于console template的原文鏈接 點我
下面介紹Grafana。
Console Teamplet雖然能滿足一定的可視化需求,但是也僅僅是對Prometheus的基本能力的補充。同時使用也會有許多問題,首先用戶需要學習和了解Go Template模板語言,其它其支持的可視化圖表類型也非常有限,最后其管理也有一定的成本。在第1章的“初識Prometheus”中我們已經嘗試通過Grafana快速搭建過一個主機監控的Dashboard,在本章中將會帶來讀者學習如何使用Grafana創建更加精美的可視化報表。
首先Grafana是一個通用的可視化工具。‘通用’意味著Grafana不僅僅適用于展示Prometheus下的監控數據,也同樣適用于一些其他的數據可視化需求。在開始使用Grafana之前,我們首先需要明確一些Grafana下的基本概念,以幫助用戶能夠快速理解Grafana。
對于Grafana而言,Prometheus這類為其提供數據的對象均稱為數據源(Data Source)。目前,Grafana官方提供了對:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。對于Grafana管理員而言,只需要將這些對象以數據源的形式添加到Grafana中,Grafana便可以輕松的實現對這些數據的可視化工作。
通過數據源定義好可視化的數據來源之后,對于用戶而言最重要的事情就是實現數據的可視化。在Grafana中,我們通過Dashboard來組織和管理我們的數據可視化圖表:
如上所示,在一個Dashboard中一個最基本的可視化單元為一個 Panel(面板) ,Panel通過如趨勢圖,熱力圖的形式展示可視化數據。 并且在Dashboard中每一個Panel是一個完全獨立的部分,通過Panel的 Query Editor(查詢編輯器) 我們可以為每一個Panel自己查詢的數據源以及數據查詢方式,例如,如果以Prometheus作為數據源,那在Query Editor中,我們實際上使用的是PromQL,而Panel則會負責從特定的Prometheus中查詢出相應的數據,并且將其可視化。由于每個Panel是完全獨立的,因此在一個Dashboard中,往往可能會包含來自多個Data Source的數據。
Grafana通過插件的形式提供了多種Panel的實現,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用戶還可通過插件安裝更多類型的Panel面板。
除了Panel以外,在Dashboard頁面中,我們還可以定義一個 Row(行) ,來組織和管理一組相關的Panel。
除了Panel, Row這些對象以外,Grafana還允許用戶為Dashboard定義 Templating variables(模板參數) ,從而實現可以與用戶動態交互的Dashboard頁面。同時Grafana通過JSON數據結構管理了整個Dasboard的定義,因此這些Dashboard也是非常方便進行共享的。Grafana還專門為Dashboard提供了一個共享服務: ,通過該服務用戶可以輕松實現Dashboard的共享,同時我們也能快速的從中找到我們希望的Dashboard實現,并導入到自己的Grafana中。
作為一個通用可視化工具,Grafana除了提供靈活的可視化定制能力以外,還提供了面向企業的組織級管理能力。在Grafana中Dashboard是屬于一個 Organization(組織) ,通過Organization,可以在更大規模上使用Grafana,例如對于一個企業而言,我們可以創建多個Organization,其中 User(用戶) 可以屬于一個或多個不同的Organization。 并且在不同的Organization下,可以為User賦予不同的權限。 從而可以有效的根據企業的組織架構定義整個管理模型。
對于Grafana而言,Prometheus就是一個用于存儲監控樣本數據的數據源(Data Source)通過使用PromQL查詢特定Prometheus實例中的數據并且在Panel中實現可視化。
接下來,我們將帶領讀者了解如何通過Panel創建精美的可視化圖表。
Panel是Grafana中最基本的可視化單元。每一種類型的面板都提供了相應的查詢編輯器(Query Editor),讓用戶可以從不同的數據源(如Prometheus)中查詢出相應的監控數據,并且以可視化的方式展現。
Grafana中所有的面板均以插件的形式進行使用,當前內置了11種類型的面板,常用的包括:Graph,Singlestat,Heatmap, Dashlist,Table以及Text等。
其中像Graph這樣的面板允許用戶可視化任意多個監控指標以及多條時間序列。而Siglestat則必須要求查詢結果為單個樣本。Dashlist和Text相對比較特殊,它們與特定的數據源無關。
通過Grafana UI用戶可以在左邊的菜單欄增加一個Dashboard,然后里面選擇 Choose Visualization 即可看到下面這些的面板:
選擇想要創建的面板類型即可。這里以Graph面板為例,選擇Graph后我們看到有4個菜單的內容需要進行設置的。
最上面的那個是Queries,在這里要定義數據源以及查詢的PromQL語句;第二個也就是上圖看到的,這里可以定義圖表顯示的內容,比如x軸和y軸的設置;第三個是General,可以定義面板的名稱以及注釋等;最后一個是alert,配置告警信息(Grafana也可以做告警的)。
在通用設置中,除了一些Panel的基本信息以外,最主要的能力就是定義動態Panel的能力,這部分內容會在本章的“模板化Dashboard”小結中詳細介紹。
這4個設置菜單里面,最重要是第一個菜單,也就是PromQL查詢語言的編寫,示例為我要顯示CPU的使用率的情況,我這么設置:
公式為: avg(irate(node_cpu_seconds_total{mode!='idle'}[2m])) without (cpu)
在數據源的選擇那里,有好幾個選項。其中default是我們前面設定的默認數據源;Prometheus是我們添加的數據源;Grafana則用于需要查詢Grafana自身狀態時使用; Mixed用于需要從多個數據源中查詢和渲染數據的場景;另外一個Dashboard不清楚了。這里我們選擇Prometheus作為數據源。
選擇好數據源之后,我們要配置查詢的語句。Grafana提供了對PromQL的完整支持,在Query Editor中,可以添加任意個Query,并且使用PromQL表達式從Prometheus中查詢相應的樣本數據。
每個PromQL表達式都可能返回多條時間序列。**Legend **用于控制如何格式化每條時間序列的圖例信息。Grafana支持通過模板的方式,根據時間序列的標簽動態生成圖例名稱,例如:使用表示使用當前時間序列中的instance標簽的值作為圖例名稱:
當查詢到的樣本數據量非常大時可以導致Grafana渲染圖標時出現一些性能問題,通過 Min Step 可以控制Prometheus查詢數據時的最小步長(Step),從而減少從Prometheus返回的數據量。
Resolution 選項,則可以控制Grafana自身渲染的數據量。例如,如果 Resolution 的值為 1/10 ,Grafana會將Prometeus返回的10個樣本數據合并成一個點。因此 Resolution 越小(1小于10,也就是默認已經最小了)可視化的精確性越高,反之,可視化的精度越低。
Format 選項定義如何格式化Prometheus返回的樣本數據。這里提供了3個選項:Table,Time Series和Heatmap,分別用于Tabel面板,Graph面板和Heatmap面板的數據可視化。
除此以外,Query Editor還提供了調試相關的功能,點擊 Query Inspector 可以展開相關的調試面板:
在這里我們可以配置顯示的樣式,這里我只自定義了左邊Y軸的數字格式,選擇為百分比。
在這里我定義了面板的名稱已經注釋
這里我沒有做定義,最后的圖表如下:
Graph面板是最常用的一種可視化面板,其通過折線圖或者柱狀圖的形式顯示監控樣本隨時間而變化的趨勢。我們繼續用CPU的例子來做講解:
查詢公式為
上面的箭頭指向, Add series override菜單,可以讓我們自定義某一條折線的樣式
繼續往下,這里可以定義X、Y軸的情況,比如我把左邊Y軸的單位改為百分數。
繼續往下,這里可以定義圖例的樣式,也就是我們前面定義的 {{ instance }} 的樣式,這里我選擇用表格來顯示,顯示min、max和current的值。
繼續往下,這里可以定義一個閾值,圖表是告警的閾值。比如說我的CPU使用率超過50%,那就會顯示不同的顏色,有一條閾值線。
這里和之前一樣,只定義這個面板的名稱和注釋。
最后的圖表是:
熱力圖這里不做介紹,這個用得稍微少點。可以看原文 點我
Singlem Panel側重于展示系統的當前狀態而非變化趨勢。如下所示,在以下場景中特別適用于使用SingleStat:
如下所示,是使用SingleStat進行數據可視化的顯示效果:
我們繼續用CPU來說事,比如我這里定義CPU使用率低于50%就定義主機狀態為健康,否則就是不健康。
對于SingleStat Panel而言,其只能處理一條時間序列,否則頁面中會提示“Multiple Series Error”錯誤信息。這里使用上例一樣的語句去查詢:
首先我們新建一個singlestat面板,然后輸入公式,這時候毫無疑問出現了錯誤提示:
為了能夠正常顯示,這里我們手動指定下單個實例,修改語句為:
這時候就有數據了,接下來我們要修改圖表的樣式。
默認情況下,當前面板顯示的是平均值,我們實際要看的是當前的值.我們還要修改顯示的顏色,這里我定義了兩個值,小于0.5的時候顯示綠色,大于0.8顯示紅色,中間顯示橙色;然后設置顯示折線圖,并設置為綠色。
為了提高數字的可讀性,我們把數字替換為文字。CPU使用率低于50%的時候顯示為healthy,大于50%的時候顯示為unhealthy。
配置面板名稱及注釋
最后的成品如下:
前面我們介紹的例子中,Grafana能夠方便的將Prometheus返回的數據進行可視化展示。例如,在展示主機CPU使用率時,我們使用了如下表達式:
該表達式會返回當前Promthues中存儲的所有時間序列,每一臺主機都會有一條單獨的曲線用于體現其CPU使用率的變化情況:
而當用戶只想關注其中某些主機時,基于當前我們已經學習到的知識只有兩種方式,要么每次手動修改Panel中的PromQL表達式,要么直接為這些主機創建單獨的Panel。但是無論如何,這些硬編碼方式都會直接導致Dashboard配置的頻繁修改。在這一小節中我們將學習使用Dashboard變量的方式解決以上問題。
在Grafana中用戶可以為Dashboard定義一組變量(Variables),變量一般包含一個到多個可選值。如下所示,Grafana通過將變量渲染為一個下拉框選項,從而使用戶可以動態的改變變量的值:
例如,這里定義了一個名為node的變量,用戶可以通過在PromQL表達式或者Panel的標題中通過以下形式使用該變量:
變量的值可以支持單選或者多選,當對接Prometheus時,Grafana會自動將$node的值格式化為如“ host1|host2|host3 ”的形式。配合使用PromQL的標簽正則匹配“ =~ ”,通過動態改變PromQL從而實現基于標簽快速對時間序列進行過濾。
通過Dashboard頁面的Settings選項,可以進入Dashboard的配置頁面并且選擇Variables子菜單:
用戶需要指定變量的名稱,后續用戶就可以通過$variable_name的形式引用該變量。Grafana目前支持7種不同的變量類型,而能和Prometheus一起工作的主要包含以下5種類型:
Label屬性用于指定界面中變量的顯示名稱,Hide屬性則用于指定在渲染界面時是否隱藏該變量的下拉框。
當Prometheus同時采集了多個主機節點的監控樣本數據時,用戶希望能夠手動選擇并查看其中特定主機的監控數據。這時我們需要使用Query類型的變量。
如上所示,這里我們為Dashboard創建了一個名為node的變量,并且指定其類型為Query。Query類型的變量,允許用戶指定數據源以及查詢表達式,并通過正則匹配(Regex)的方式對查詢結果進行處理,從而動態生成變量的可選值。在這里指定了數據源為Prometheus,通過使用node_load1我們得到了兩條時間序列:
通過指定正則匹配表達式為 /.*instance="([^"]*).*/ 從而匹配出標簽instance的值作為node變量的所有可選項,即:
Selection Options 選項中可以指定該變量的下拉框是否支持多選,以及是否包含全選(All)選項。
保存變量后,用戶可以在Panel的Queries中通過$node的方式使用該變量,如下所示:
這里需要注意的是,如果允許用戶多選在PromQL表達式中應該使用標簽的正則匹配模式,因為Grafana會自動將多個選項格式化為如“192.168.113.52:9100|192.168.113.70:9100”的形式。
使用Query類型的變量能夠根據允許用戶能夠根據時間序列的特征維度對數據進行過濾。在定義Query類型變量時,除了使用PromQL查詢時間序列以過濾標簽的方式以外,Grafana還提供了幾個有用的函數:
例如,當需要監控Prometheus所有采集任務的狀態時,可以使用如下方式,獲取當前所有采集任務的名稱:
label_values(up, job)
例如,有時候我們想要動態修改變量查詢結果。比如某一個節點綁定了多個ip,一個用于內網訪問,一個用于外網訪問,此時prometheus采集到的指標是內網的ip,但我們需要的是外網ip。這里我們想要能在Grafana中動態改變標簽值,進行ip段的替換,而避免從prometheus或exporter中修改采集指標。
這時需要使用grafana的query_result函數
當在一個Panel中展示多條時間序列數據時,通過使用變量可以輕松實現對時間序列的過濾,提高用戶交互性。除此以外,我們還可以使用變量自動生成Panel或者Row。 如下所示,當需要可視化當前系統中所有采集任務的監控任務運行狀態時,由于Prometheus的采集任務配置可能隨時發生變更,通過硬編碼的形式實現,會導致Dashboard配置的頻繁變更:
如下所示,這里為Dashboard定義了一遍名為job的變量:
通過使用label_values函數,獲取到當前Promthues監控指標up中所有可選的job標簽的值:
如果變量啟用了Multi-value或者Include All Option選項的變量,那么在Panel的General選項的Repeat中可以選擇自動迭代的變量,這里使用了Singlestat展示所有監控采集任務的狀態:
Repeat選項設置完成后,Grafana會根據當前用戶的選擇,自動創建一個到多個Panel實例。 為了能夠使Singlestat Panel能夠展示正確的數據,如下所示,在Prometheus中,我們依然使用了 job 變量,不過此時的$job反應的是當前迭代的值:
最后的結果圖如下,當我選擇全部的時候,自動生成了6個Panel。
分享名稱:go語言獲取頁面圖表 go語言 圖形界面
當前網址:http://www.yijiale78.com/article44/hhcphe.html
成都網站建設公司_創新互聯,為您提供建站公司、移動網站建設、域名注冊、品牌網站制作、動態網站、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯