欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go Gorm 示例詳解

 更新時(shí)間:2025年01月16日 09:41:09   作者:米飯好好吃.  
Gorm是一款高性能的Golang ORM庫(kù),便于開發(fā)人員提高效率,本文介紹了Gorm的基本概念、數(shù)據(jù)庫(kù)連接、基本操作(創(chuàng)建表、新增記錄、查詢記錄、修改記錄、刪除記錄)等,本文介紹Go Gorm的相關(guān)知識(shí),感興趣的朋友一起看看吧

1. 概念

Gorm 官網(wǎng):https://gorm.io/zh_CN/docs/

GormThe fantastic ORM library for Golang aims to be developer friendly,這是官網(wǎng)的介紹,簡(jiǎn)單來說 Gorm 就是一款高性能的 Golang ORM 庫(kù),便于開發(fā)人員提高效率

那么 ORM(Object Relation Mapping) 又是什么呢?在 Golang 語(yǔ)言中,Object指的就是 struct 結(jié)構(gòu)體對(duì)象,Relation 就是數(shù)據(jù)庫(kù)當(dāng)中的關(guān)系,Mapping則表示兩者具有映射關(guān)系,具體表現(xiàn)如下:

  • Go當(dāng)中的結(jié)構(gòu)體聲明 <-> 數(shù)據(jù)庫(kù)層面的表結(jié)構(gòu)
  • Go當(dāng)中的結(jié)構(gòu)體實(shí)例 <-> 數(shù)據(jù)庫(kù)層面的一條表記錄

2. 數(shù)據(jù)庫(kù)連接

2.1 安裝依賴

想要在 Go 代碼中使用 gorm 我們需要先引入對(duì)應(yīng)的依賴:

  • gorm 庫(kù)依賴:gorm.io/gorm
  • 特定數(shù)據(jù)庫(kù)驅(qū)動(dòng)依賴:gorm.io/driver/mysql

然后使用 go mod 包管理工具加載對(duì)應(yīng)的依賴:

go mod init first_gorm:初始化

go mod tidy:加載依賴

然后就可以開始編寫代碼了!

2.2 連接數(shù)據(jù)庫(kù)

在操作數(shù)據(jù)庫(kù)之前,我們還需要與指定的數(shù)據(jù)庫(kù)建立連接,此處以 MySQL數(shù)據(jù)庫(kù)為例:

基本語(yǔ)法:db, err := gorm.Open(mysql.Open(dsn語(yǔ)句), &gorm.Config{})

其中 dsn 語(yǔ)句為特定的連接格式,形式如下:user:pwd@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
func main() {
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("數(shù)據(jù)庫(kù)連接失敗!", err)
	}
	fmt.Println(db)
}

程序運(yùn)行結(jié)果:

控制臺(tái)打印出 db 對(duì)象,說明我們已經(jīng)成功與數(shù)據(jù)庫(kù)建立連接(必須保證數(shù)據(jù)庫(kù)中存在指定的數(shù)據(jù)庫(kù))

3. 數(shù)據(jù)庫(kù)基本操作

3.1 創(chuàng)建表(表關(guān)系映射)

3.1.1 基本使用

我們可以使用 gorm 提供的 API 來創(chuàng)建指定的表,需要關(guān)注的是 結(jié)構(gòu)體聲明 <=> 數(shù)據(jù)庫(kù)表結(jié)構(gòu),因此我們想要?jiǎng)?chuàng)建一個(gè)表結(jié)構(gòu)實(shí)則只需要定義一個(gè)結(jié)構(gòu)體類型

-- 創(chuàng)建user表 --
create table t_user (
  user_id bigint primary key auto_increment,
  user_name varchar(32) not null,
  user_pwd varchar(128) not null,
  user_phone varchar(32) unique
) 

使用上述 SQL 語(yǔ)句創(chuàng)建表的行為等價(jià)于在 Go 語(yǔ)言當(dāng)中定義下列結(jié)構(gòu)體對(duì)象:

// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}

創(chuàng)建表基本語(yǔ)法:err := db.AutoMigrate(&特定結(jié)構(gòu)體{})

package main
import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
    UserId    int64  `gorm:"primaryKey;autoIncrement"`
    UserName  string `gorm:"not null;type:varchar(32)"`
    UserPwd   string `gorm:"not null;type:varchar(128)"`
    UserPhone string `gorm:"unique;type:varchar(32)"`
}
func main() {
    // 連接數(shù)據(jù)庫(kù)
    var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        fmt.Println("數(shù)據(jù)庫(kù)連接失敗!", err)
    }
    err = db.AutoMigrate(&User{})
    if err != nil {
        fmt.Println("數(shù)據(jù)庫(kù)表遷移失敗!", err)
    }
}

程序運(yùn)行結(jié)果:

3.1.2 自定義表名

我們發(fā)現(xiàn)定義結(jié)構(gòu)體名稱為 “User” 時(shí)會(huì)創(chuàng)建 “users” 的表名,但是如果我就希望叫做 “t_user” 應(yīng)該怎么辦呢?我們可以定義一個(gè)名為 TableName的方法接收器,格式如下:

func (*User) TableName() string {
	return "t_user"
}

刪除原先的表后再次運(yùn)行,可以發(fā)現(xiàn)此時(shí)表名稱已經(jīng)指定為t_user

3.2 新增記錄

我們還可以使用 gorm 提供的 API 進(jìn)行表記錄的插入,這里我們需要關(guān)注** 結(jié)構(gòu)體實(shí)例 <=> 表記錄** 之間的映射關(guān)系,也就意味著我們可以通過創(chuàng)建一個(gè)結(jié)構(gòu)體實(shí)例,實(shí)現(xiàn)插入一條記錄的效果

3.2.1 單條數(shù)據(jù)插入

基本語(yǔ)法:db.Create(&結(jié)構(gòu)體實(shí)例)

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("數(shù)據(jù)庫(kù)連接失敗!", err)
	}
	// 插入單條數(shù)據(jù)
	var user = User{UserName: "wjj", UserPwd: "123", UserPhone: "111"}
	db.Create(&user)
	// 再次打印user
	fmt.Println(user)
}

數(shù)據(jù)庫(kù)表結(jié)果:

程序運(yùn)行結(jié)果:

?? 提示:從中我們還可以發(fā)現(xiàn),插入數(shù)據(jù)之后,還會(huì)將數(shù)據(jù)庫(kù)表中記錄回顯到結(jié)構(gòu)體實(shí)例當(dāng)中!這也是為什么需要傳遞地址的原因!

3.2.2 批量插入數(shù)據(jù)

當(dāng)我們需要批量插入多條數(shù)據(jù)的時(shí)候,循環(huán)調(diào)用 db.Create(&結(jié)構(gòu)體實(shí)例)這個(gè)方法效率就太低了!因?yàn)閿?shù)據(jù)庫(kù)連接會(huì)話頻繁創(chuàng)建銷毀耗時(shí)比較高,更合適的方法就是進(jìn)行批量插入

基本語(yǔ)法:db.Create(&結(jié)構(gòu)體實(shí)例切片),仍舊是 Create 函數(shù),但是參數(shù)我們可以傳遞結(jié)構(gòu)體實(shí)例切片

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 批量插入多條數(shù)據(jù)
	var users = []User{
		{UserName: "th", UserPwd: "123", UserPhone: "222"},
		{UserName: "lhf", UserPwd: "123", UserPhone: "333"},
		{UserName: "zcy", UserPwd: "123", UserPhone: "444"},
	}
	db.Create(&users)
	// 打印結(jié)果
	fmt.Println(users)
}

數(shù)據(jù)庫(kù)表結(jié)果:

程序運(yùn)行結(jié)果:

3.3 查詢記錄

3.3.1 查詢所有記錄

基本語(yǔ)法:db.Find(&結(jié)構(gòu)體實(shí)例切片)

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 查詢?nèi)坑涗?
	var users []User
	db.Find(&users)
	// 打印結(jié)果
	fmt.Println(users)
}

程序運(yùn)行結(jié)果:

3.3.2 按照條件查詢

我們可以使用 Where 指定查詢條件進(jìn)行過濾

基本語(yǔ)法:db.Where("user_id > ?", 2).Find()表示想要查詢 user_id > 2 的所有記錄

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 按照條件查詢
	var users []User
	db.Where("user_id > ?", 2).Find(&users)
	// 打印
	fmt.Println(users)
}

程序運(yùn)行結(jié)果:

3.3.3 查詢單條記錄

查詢單條記錄有以下兩種情況:

  • 查詢第一條記錄:db.First(&結(jié)構(gòu)體實(shí)例)
  • ???????查詢最后一條記錄:db.Last(&結(jié)構(gòu)體實(shí)例)
package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 查詢第一條記錄
	var firstUser User
	db.First(&firstUser)
	// 查詢最后一條記錄
	var lastUser User
	db.Last(&lastUser)
	fmt.Println(firstUser, lastUser)
}

程序運(yùn)行結(jié)果:

3.3.4 查詢記錄總數(shù)

基本語(yǔ)法:db.Find(&結(jié)構(gòu)體實(shí)例切片).Count(&整型變量)

package main
import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 查詢總數(shù)
	var users []User
	var totalSize int64
	db.Find(&users).Count(&totalSize)
	fmt.Println("記錄總數(shù):", totalSize)
}

程序運(yùn)行結(jié)果:

3.4 修改記錄

3.4.1 按照默認(rèn)主鍵修改

基本語(yǔ)法:db.Save(&結(jié)構(gòu)體實(shí)例)會(huì)按照結(jié)構(gòu)體實(shí)例當(dāng)中的主鍵字段找到對(duì)應(yīng)數(shù)據(jù)庫(kù)記錄進(jìn)行修改

package main
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 查詢user_id為1的記錄
	var stu User
	db.Where("user_id = ?", 1).Find(&stu)
	// 修改stu姓名為wjj1
	stu.UserName = "wjj1"
	// 修改(按照主鍵修改)
	db.Save(&stu)
}

程序運(yùn)行結(jié)果:

3.4.2 修改指定字段

上述按照默認(rèn)主鍵修改的方式修改了全部字段,如果我們只想修改特定單個(gè)字段可以使用以下方式:

基本語(yǔ)法:db.Model(&結(jié)構(gòu)體實(shí)例).Where(條件).Update(字段, 修改值)

package main
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 修改user_id為1的記錄 user_name為wjj
	var stu User
	db.Model(&stu).Where("user_id = ?", 1).Update("user_name", "wjj")
}

程序運(yùn)行結(jié)果:

3.4.3 修改多個(gè)字段

我們還可以指定多個(gè)字段進(jìn)行修改

基本語(yǔ)法:db.Model(&結(jié)構(gòu)體實(shí)例).Where(條件).updates(修改實(shí)例),其中修改實(shí)例可以是結(jié)構(gòu)體也可以是map對(duì)象

package main
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 修改user_id為1的記錄 user_name為WJJ, user_pwd為"999"
	var stu User
	var fields = map[string]interface{}{"user_name": "WJJ", "user_pwd": "999"}
	db.Model(&stu).Where("user_id = ?", 1).Updates(fields)
}

程序運(yùn)行結(jié)果:

3.5 刪除記錄

3.5.1 按照默認(rèn)主鍵刪除

基本語(yǔ)法:db.Delete(&結(jié)構(gòu)體實(shí)例)會(huì)自動(dòng)按照主鍵找到表中記錄,然后刪除

package main
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 按照默認(rèn)主鍵刪除
	var user = User{UserId: 1}
	db.Delete(&user)
}

程序運(yùn)行結(jié)果:

3.5.2 指定條件刪除

我們想更加精細(xì)化的控制刪除條件就需要借助 Where 函數(shù):

基本語(yǔ)法:db.Where(條件).Delete(&結(jié)構(gòu)體實(shí)例)

package main
import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)
// User 結(jié)構(gòu)體聲明
type User struct {
	UserId    int64  `gorm:"primaryKey;autoIncrement"`
	UserName  string `gorm:"not null;type:varchar(32)"`
	UserPwd   string `gorm:"not null;type:varchar(128)"`
	UserPhone string `gorm:"unique;type:varchar(32)"`
}
func (*User) TableName() string {
	return "t_user"
}
func main() {
	// 連接數(shù)據(jù)庫(kù)
	var dsn = "root:QWEzxc123456@tcp(127.0.0.1:3306)/gorm_test"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	// 按照條件刪除
	db.Where("user_id = ?", 10).Delete(&User{})
}

程序運(yùn)行結(jié)果:

到此這篇關(guān)于Go Gorm 詳解的文章就介紹到這了,更多相關(guān)Go Gorm 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go語(yǔ)言編程學(xué)習(xí)實(shí)現(xiàn)圖的廣度與深度優(yōu)先搜索

    go語(yǔ)言編程學(xué)習(xí)實(shí)現(xiàn)圖的廣度與深度優(yōu)先搜索

    這篇文章主要為大家介紹了go語(yǔ)言編程學(xué)習(xí)實(shí)現(xiàn)圖的廣度與深度優(yōu)先搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • go?mod文件內(nèi)容版本號(hào)簡(jiǎn)單用法詳解

    go?mod文件內(nèi)容版本號(hào)簡(jiǎn)單用法詳解

    這篇文章主要為大家介紹了go?mod文件內(nèi)容版本號(hào)簡(jiǎn)單用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解go程序如何在windows服務(wù)中開啟和關(guān)閉

    詳解go程序如何在windows服務(wù)中開啟和關(guān)閉

    這篇文章主要介紹了一個(gè)go程序,如何在windows服務(wù)中優(yōu)雅開啟和關(guān)閉,文中通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • 深入理解Golang?make和new的區(qū)別及實(shí)現(xiàn)原理

    深入理解Golang?make和new的區(qū)別及實(shí)現(xiàn)原理

    在Go語(yǔ)言中,有兩個(gè)比較雷同的內(nèi)置函數(shù),分別是new和make方法,二者都可以用來分配內(nèi)存,那他們有什么區(qū)別呢?下面我們就從底層來分析一下二者的不同。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-10-10
  • Golang排序和查找使用方法介紹

    Golang排序和查找使用方法介紹

    排序操作和查找一樣是很多程序經(jīng)常使用的操作。盡管一個(gè)最短的快排程序只要15行就可以搞定,但是一個(gè)健壯的實(shí)現(xiàn)需要更多的代碼,并且我們不希望每次我們需要的時(shí)候都重寫或者拷貝這些代碼
    2022-12-12
  • Golang?內(nèi)存模型The?Go?Memory?Model

    Golang?內(nèi)存模型The?Go?Memory?Model

    這篇文章主要為大家介紹了Golang?內(nèi)存模型The?Go?Memory?Model實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • go語(yǔ)言?http模型reactor示例詳解

    go語(yǔ)言?http模型reactor示例詳解

    這篇文章主要介紹了go語(yǔ)言?http模型reactor,接下來看一段基于reactor的示例,這里運(yùn)行通過?go?run?main.go,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • golang中import cycle not allowed解決的一種思路

    golang中import cycle not allowed解決的一種思路

    這篇文章主要給大家介紹了關(guān)于golang中import cycle not allowed解決的一種思路,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • go讀取request.Body內(nèi)容踩坑實(shí)戰(zhàn)記錄

    go讀取request.Body內(nèi)容踩坑實(shí)戰(zhàn)記錄

    很多初學(xué)者在使用Go語(yǔ)言進(jìn)行Web開發(fā)時(shí),都會(huì)遇到讀取 request.Body內(nèi)容的問題,這篇文章主要給大家介紹了關(guān)于go讀取request.Body內(nèi)容踩坑實(shí)戰(zhàn)記錄的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Go語(yǔ)言中零拷貝的原理與實(shí)現(xiàn)詳解

    Go語(yǔ)言中零拷貝的原理與實(shí)現(xiàn)詳解

    零拷貝是相對(duì)于用戶態(tài)來講的,即數(shù)據(jù)在用戶態(tài)不發(fā)生任何拷貝,那么零拷貝的原理是什么,又是如何實(shí)現(xiàn)的呢,下面小編就來和大家詳細(xì)聊聊吧
    2023-08-08

最新評(píng)論