真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言post登錄百度 go語言網(wǎng)頁

go語言postgresql數(shù)據(jù)庫驅(qū)動怎么用

PostgreSQL和MySQL比較,它更加龐大一點,因為它是用來替代Oracle而設(shè)計的。所以在企業(yè)應(yīng)用中采用PostgreSQL是一個明智的選擇。

創(chuàng)新互聯(lián)是專業(yè)的尋甸網(wǎng)站建設(shè)公司,尋甸接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行尋甸網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

現(xiàn)在MySQL被Oracle收購之后,有傳聞Oracle正在逐步的封閉MySQL,,鑒于此,將來我們也許會選擇PostgreSQL而不是MySQL作為項目的后端數(shù)據(jù)庫。

1、驅(qū)動

Go實現(xiàn)的支持PostgreSQL的驅(qū)動也很多,因為國外很多人在開發(fā)中使用了這個數(shù)據(jù)庫。

支持database/sql驅(qū)動,純Go寫的

支持database/sql驅(qū)動,純Go寫的

支持database/sql驅(qū)動,純Go寫的

在下面的示例中我采用了第一個驅(qū)動,因為它目前使用的人最多,在github上也比較活躍。

2、實例代碼

數(shù)據(jù)庫建表語句:

復(fù)制代碼

CREATE TABLE userinfo

(

uid serial NOT NULL,

username character varying(100) NOT NULL,

departname character varying(500) NOT NULL,

Created date,

CONSTRAINT userinfo_pkey PRIMARY KEY (uid)

)

WITH (OIDS=FALSE);

CREATE TABLE userdeatail

(

uid integer,

intro character varying(100),

profile character varying(100)

)

WITH(OIDS=FALSE);

復(fù)制代碼

看下面這個Go如何操作數(shù)據(jù)庫表數(shù)據(jù):增刪改查

復(fù)制代碼

package main

import (

"database/sql"

"fmt"

_ "github.com/bmizerany/pq"

)

func main() {

db, err := sql.Open("postgres", "user=astaxie password=astaxie dbname=test sslmode=disable")

checkErr(err)

//插入數(shù)據(jù)

stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")

checkErr(err)

res, err := stmt.Exec("astaxie", "研發(fā)部門", "2012-12-09")

checkErr(err)

//pg不支持這個函數(shù),因為他沒有類似MySQL的自增ID

id, err := res.LastInsertId()

checkErr(err)

fmt.Println(id)

//更新數(shù)據(jù)

stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")

checkErr(err)

res, err = stmt.Exec("astaxieupdate", 1)

checkErr(err)

affect, err := res.RowsAffected()

checkErr(err)

fmt.Println(affect)

//查詢數(shù)據(jù)

rows, err := db.Query("SELECT * FROM userinfo")

checkErr(err)

for rows.Next() {

var uid int

var username string

var department string

var created string

err = rows.Scan(uid, username, department, created)

checkErr(err)

fmt.Println(uid)

fmt.Println(username)

fmt.Println(department)

fmt.Println(created)

}

//刪除數(shù)據(jù)

stmt, err = db.Prepare("delete from userinfo where uid=$1")

checkErr(err)

res, err = stmt.Exec(1)

checkErr(err)

affect, err = res.RowsAffected()

checkErr(err)

fmt.Println(affect)

db.Close()

}

func checkErr(err error) {

if err != nil {

panic(err)

}

}

復(fù)制代碼

從上面的代碼我們可以看到,PostgreSQL是通過$1,$2這種方式來指定要傳遞的參數(shù),而不是MySQL中的?,另外在sql.Open中的dsn信息的格式也與MySQL的驅(qū)動中的dsn格式不一樣,所以在使用時請注意它們的差異。

還有pg不支持LastInsertId函數(shù),因為PostgreSQL內(nèi)部沒有實現(xiàn)類似MySQL的自增ID返回,其他的代碼幾乎是一模一樣

求教golang中http發(fā)送post請求gb2312編碼的解決方案

你好,如果你使用的是httpclient,可是使用下面的方法發(fā)送gb2312數(shù)據(jù), HttpPost httpRequest = new HttpPost(url); httpRequest.setEntity(new UrlEncodedFormEntity(pairs, "gb2312"));

GO語言(十三):使用 Go 和 Gin 開發(fā) RESTful API(下)

當(dāng)客戶端在 發(fā)出POST請求時/albums,您希望將請求正文中描述的專輯添加到現(xiàn)有專輯數(shù)據(jù)中。

為此,您將編寫以下內(nèi)容:

1、編寫代碼

a.添加代碼以將專輯數(shù)據(jù)添加到專輯列表。

在此代碼中:

1)用于Context.BindJSON 將請求正文綁定到newAlbum。

2) album將從 JSON 初始化的結(jié)構(gòu)附加到albums 切片。

3)向響應(yīng)添加201狀態(tài)代碼,以及表示您添加的專輯的 JSON。

b.更改您的main函數(shù),使其包含該router.POST函數(shù),如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數(shù)相關(guān)聯(lián)。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關(guān)聯(lián)。這樣,您可以根據(jù)客戶端使用的方法將發(fā)送到單個路徑的請求單獨路由。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.從包含 main.go 的目錄中的命令行,運行代碼。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示添加專輯的標(biāo)題和 JSON。

d.與上一節(jié)一樣,使用curl檢索完整的專輯列表,您可以使用它來確認(rèn)添加了新專輯。

該命令應(yīng)顯示專輯列表。

當(dāng)客戶端向 發(fā)出請求時GET /albums/[id],您希望返回 ID 與id路徑參數(shù)匹配的專輯。

為此,您將:

a.在您在上一節(jié)中添加的函數(shù)下方postAlbums,粘貼以下代碼以檢索特定專輯。

此getAlbumByID函數(shù)將提取請求路徑中的 ID,然后找到匹配的專輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數(shù)。當(dāng)您將此處理程序映射到路徑時,您將在路徑中包含參數(shù)的占位符。

(2)循環(huán)album切片中的結(jié)構(gòu),尋找其ID 字段值與id參數(shù)值匹配的結(jié)構(gòu)。如果找到,則將該album結(jié)構(gòu)序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應(yīng)返回。

如上所述,實際使用中的服務(wù)可能會使用數(shù)據(jù)庫查詢來執(zhí)行此查找。

(3)如果找不到專輯,則返回 HTTP 404錯誤。

b.最后,更改您的main,使其包含對router.GET的新調(diào)用,路徑現(xiàn)在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關(guān)聯(lián)。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數(shù)。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務(wù)器。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務(wù)。

本節(jié)包含您使用本教程構(gòu)建的應(yīng)用程序的代碼。

Go語言文件操作

本文主要介紹了Go語言中文件讀寫的相關(guān)操作。

文件是什么?

計算機中的文件是存儲在外部介質(zhì)(通常是磁盤)上的數(shù)據(jù)集合,文件分為文本文件和二進制文件。

os.Open() 函數(shù)能夠打開一個文件,返回一個 *File 和一個 err 。對得到的文件實例調(diào)用 close() 方法能夠關(guān)閉文件。

為了防止文件忘記關(guān)閉,我們通常使用defer注冊文件關(guān)閉語句。

Read方法定義如下:

它接收一個字節(jié)切片,返回讀取的字節(jié)數(shù)和可能的具體錯誤,讀到文件末尾時會返回 0 和 io.EOF 。 舉個例子:

使用for循環(huán)讀取文件中的所有數(shù)據(jù)。

bufio是在file的基礎(chǔ)上封裝了一層API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能夠讀取完整的文件,只需要將文件名作為參數(shù)傳入。

os.OpenFile() 函數(shù)能夠以指定模式打開文件,從而實現(xiàn)文件寫入相關(guān)功能。

其中:

name :要打開的文件名 flag :打開文件的模式。 模式有以下幾種:

perm :文件權(quán)限,一個八進制數(shù)。r(讀)04,w(寫)02,x(執(zhí)行)01。


網(wǎng)頁題目:go語言post登錄百度 go語言網(wǎng)頁
當(dāng)前鏈接:http://weahome.cn/article/dddggde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部