最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用騰訊云go sdk 查詢(xún)對(duì)象存儲(chǔ)中最新文件

 更新時(shí)間:2024年03月04日 11:24:35   作者:對(duì)你無(wú)可奈何2008  
這篇文章主要介紹了使用騰訊云go sdk 查詢(xún)對(duì)象存儲(chǔ)中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁(yè)檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象,我們還展示了如何優(yōu)化用戶體驗(yàn),通過(guò)實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來(lái)改進(jìn)程序,需要的朋友可以參考下

背景:

騰訊云賬號(hào)下,有很多對(duì)象存儲(chǔ)COS桶:

我現(xiàn)在想確認(rèn)某一個(gè)對(duì)象存儲(chǔ)桶的活躍程度,簡(jiǎn)單的來(lái)說(shuō)。我想知道這個(gè)桶里面最后上傳的一個(gè)文件是什么,以及它的上傳時(shí)間戳。
本文將介紹如何使用騰訊云對(duì)象存儲(chǔ)(COS)的 Go 語(yǔ)言 SDK 查詢(xún)指定存儲(chǔ)桶中的最新文件信息,包括文件路徑和上傳時(shí)間。本教程假設(shè)讀者已經(jīng)具備基本的 Go 語(yǔ)言編程知識(shí),并且對(duì)騰訊云 COS 有一定的了解。

使用騰訊云go sdk 查詢(xún)對(duì)象存儲(chǔ)中最新文件

前置條件

  • 您需要擁有一個(gè)騰訊云賬號(hào),并創(chuàng)建了至少一個(gè)COS存儲(chǔ)桶。
  • 了解Go語(yǔ)言和基本的并發(fā)編程知識(shí)。
  • 確保您已安裝Go運(yùn)行時(shí)環(huán)境。

安裝騰訊云COS Go SDK

在開(kāi)始之前,先確保您的開(kāi)發(fā)環(huán)境已安裝了騰訊云COS的Go SDK。如果尚未安裝,可以使用以下Go命令安裝:

mkdir xxxx
go mod int xxxx
go get github.com/tencentyun/cos-go-sdk-v5

我們這里的操作是屬于List Object 參照:GetBucket

第一版代碼:

使用chatgpt生成第一版代碼:
main.go

package main
import (
	"context"
	"fmt"
	"net/http"
	"net/url"
	"sort"
	"time"
	"github.com/tencentyun/cos-go-sdk-v5"
)
// 請(qǐng)?zhí)鎿Q下面的假設(shè)值為實(shí)際的 SecretId、SecretKey、BucketName 和 Region。
const (
	SecretId     = "xxxxxx"
	SecretKey    = "xxxx"
	BucketName   = "xxxxxx" // 例如 "example-1250000000"
	BucketRegion = "ap-shanghai"      // 例如 "ap-guangzhou"
)
func main() {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", BucketName, BucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  SecretId,
			SecretKey: SecretKey,
		},
	})
	c := context.Background()
	opt := &cos.BucketGetOptions{
		MaxKeys: 1000, // 修改這個(gè)值以獲取更多或更少的對(duì)象
	}
	v, _, err := client.Bucket.Get(c, opt)
	if err != nil {
		panic(err)
	}
	// 對(duì)結(jié)果進(jìn)行排序,找到最后更新的對(duì)象
	if len(v.Contents) > 0 {
		sort.Slice(v.Contents, func(i, j int) bool {
			ti, _ := time.Parse(time.RFC3339, v.Contents[i].LastModified)
			tj, _ := time.Parse(time.RFC3339, v.Contents[j].LastModified)
			return ti.After(tj)
		})
		lastUpdatedObj := v.Contents[0]
		fmt.Printf("最新上傳文件路徑: %s\n", lastUpdatedObj.Key)
		fmt.Printf("最新上傳時(shí)間: %s\n", lastUpdatedObj.LastModified)
	} else {
		fmt.Println("桶中沒(méi)有文件。")
	}
}

運(yùn)行main.go

go run main.go

運(yùn)行后也許感覺(jué)是正確的,畢竟沒(méi)有報(bào)錯(cuò)。但是這里是有問(wèn)題的,為什么呢?因?yàn)槲冶旧聿恢雷詈笠粋€(gè)文件是什么,我手動(dòng)上傳了一個(gè)文件,最后一個(gè)文件應(yīng)該是輸出:go1.22.0.linux-amd64.tar.gz!

什么原因呢?問(wèn)題應(yīng)該是在這里:

c := context.Background()
	opt := &cos.BucketGetOptions{
		MaxKeys: 1000, // 修改這個(gè)值以獲取更多或更少的對(duì)象
	}

marker標(biāo)記參數(shù)沒(méi)有設(shè)置
繼續(xù)修改完善main.go代碼:

package main
import (
	"context"
	"fmt"
	"net/http"
	"net/url"
	"sort"
	"time"
	"github.com/tencentyun/cos-go-sdk-v5"
)
// 請(qǐng)?zhí)鎿Q以下的假設(shè)值為實(shí)際的 SecretId、SecretKey、BucketName 和 Region。
const (
	SecretId     = "xxxxxx"
	SecretKey    = "xxxx"
	BucketName   = "xxxxxx" // 例如 "example-1250000000"
	BucketRegion = "ap-shanghai"      // 例如 "ap-guangzhou"
)
func main() {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", BucketName, BucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  SecretId,
			SecretKey: SecretKey,
		},
	})
	c := context.Background()
	var lastUpdatedObj *cos.Object
	isTruncated := true
	nextMarker := ""
	for isTruncated {
		opt := &cos.BucketGetOptions{
			Marker:   nextMarker,
			MaxKeys:  1000, // 單次請(qǐng)求返回的最大對(duì)象數(shù)
		}
		v, _, err := client.Bucket.Get(c, opt)
		if err != nil {
			panic(err)
		}
		for _, object := range v.Contents {
			if lastUpdatedObj == nil || object.LastModified > lastUpdatedObj.LastModified {
				lastUpdatedObj = &object
			}
		}
		// 更新下一個(gè)標(biāo)記和是否截?cái)嗟臉?biāo)志
		isTruncated = v.IsTruncated
		nextMarker = v.NextMarker
	}
	// 檢查是否有對(duì)象被找到
	if lastUpdatedObj != nil {
		fmt.Printf("最新上傳文件路徑: %s\n", lastUpdatedObj.Key)
		fmt.Printf("最新上傳時(shí)間: %s\n", lastUpdatedObj.LastModified)
	} else {
		fmt.Println("桶中沒(méi)有文件。")
	}
}

運(yùn)行修改后的main.go文件:

go run main.go

輸出go1.22.0.linux-amd64.tar.gz這個(gè)起碼是正確的!

拆分代碼

想繼續(xù)拆分一下,將客戶端的創(chuàng)建和查找邏輯拆分到兩個(gè)獨(dú)立的函數(shù)createCOSClient getLastUpdatedFileInfo,然后main函數(shù)中調(diào)用

package main
import (
	"context"
	"fmt"
	"github.com/tencentyun/cos-go-sdk-v5"
	"net/http"
	"net/url"
	"sort"
	"time"
)
// 請(qǐng)?zhí)鎿Q下面的假設(shè)值為實(shí)際的 SecretId、SecretKey、BucketName 和 Region。
const (
	SecretId     = "xxxxxx"
	SecretKey    = "xxx"
	BucketName   = "xxxxx" // 例如 "example-1250000000"
	BucketRegion = "ap-shanghai"      // 例如 "ap-guangzhou"
)
// 創(chuàng)建 COS 客戶端
func createCOSClient(secretId, secretKey, bucketName, bucketRegion string) *cos.Client {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, bucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  secretId,
			SecretKey: secretKey,
		},
	})
	return client
}
func getLastUpdatedFileInfo(client *cos.Client) (key, lastModifiedTime string, err error) {
	c := context.Background()
	// 初始化一個(gè)空字符串,表示從桶的開(kāi)頭獲取文件列表
	nextMarker := ""
	var allContents []cos.Object
	for {
		opt := &cos.BucketGetOptions{
			MaxKeys: 1000,
			Marker:  nextMarker,
		}
		v, _, err := client.Bucket.Get(c, opt)
		if err != nil {
			return "", "", err
		}
		allContents = append(allContents, v.Contents...)
		// 如果沒(méi)有更多的文件,則停止循環(huán)
		if !v.IsTruncated {
			break
		}
		// 更新 nextMarker 為下一頁(yè)的開(kāi)始位置
		nextMarker = v.NextMarker
	}
	// 對(duì)所有結(jié)果進(jìn)行排序以找到最新更新的對(duì)象
	if len(allContents) > 0 {
		sort.Slice(allContents, func(i, j int) bool {
			ti, errTi := time.Parse(time.RFC3339, allContents[i].LastModified)
			tj, errTj := time.Parse(time.RFC3339, allContents[j].LastModified)
			if errTi != nil || errTj != nil {
				fmt.Printf("Error parsing time: %v, %v", errTi, errTj)
				return false
			}
			return ti.After(tj)
		})
		lastUpdatedObj := allContents[0]
		return lastUpdatedObj.Key, lastUpdatedObj.LastModified, nil
	} else {
		return "", "", fmt.Errorf("桶中沒(méi)有文件")
	}
}
func main() {
	client := createCOSClient(SecretId, SecretKey, BucketName, BucketRegion)
	key, lastModifiedTime, err := getLastUpdatedFileInfo(client)
	if err != nil {
		fmt.Printf("\n查詢(xún)失敗: %v\n", err)
		return
	}
	fmt.Printf("\n最后更新的文件:\n")
	fmt.Printf("文件路徑: %s\n", key)
	fmt.Printf("最后修改時(shí)間: %s\n", lastModifiedTime)
}

運(yùn)行main.go

go run main.go

注:為了驗(yàn)證代碼有效性,我這里后面又加了一個(gè)新的文件:zaZTYa1i2x.txt

加個(gè)進(jìn)度條

上面的代碼已經(jīng)可以正常滿足需求了,但是我新加一個(gè)進(jìn)度條,顯示查詢(xún)了多少文件了。也能大概知道一個(gè)進(jìn)度的狀況,繼續(xù)修改一下main.go

package main
import (
	"context"
	"fmt"
	"github.com/tencentyun/cos-go-sdk-v5"
	"net/http"
	"net/url"
	"sort"
	"time"
)
// 請(qǐng)?zhí)鎿Q下面的假設(shè)值為實(shí)際的 SecretId、SecretKey、BucketName 和 Region。
const (
	SecretId     = "xxxx"
	SecretKey    = "xxxxx"
	BucketName   = "xxxxx" // 例如 "example-1250000000"
	BucketRegion = "ap-shanghai"      // 例如 "ap-guangzhou"
)
// 創(chuàng)建 COS 客戶端
func createCOSClient(secretId, secretKey, bucketName, bucketRegion string) *cos.Client {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, bucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  secretId,
			SecretKey: secretKey,
		},
	})
	return client
}
func getLastUpdatedFileInfo(client *cos.Client) (key, lastModifiedTime string, err error) {
	c := context.Background()
	nextMarker := ""
	var allContents []cos.Object
	var retrievedCount int
	fmt.Println("開(kāi)始檢索文件列表...")
	for {
		opt := &cos.BucketGetOptions{
			MaxKeys: 10000,
			Marker:  nextMarker,
		}
		v, _, err := client.Bucket.Get(c, opt)
		if err != nil {
			return "", "", err
		}
		retrievedCount += len(v.Contents)
		fmt.Printf("已檢索 %d 個(gè)文件...\r", retrievedCount) // 輸出進(jìn)度信息 '\r' 會(huì)覆蓋當(dāng)前行,這樣我們就可以在同一行更新進(jìn)度
		allContents = append(allContents, v.Contents...)
		if !v.IsTruncated {
			break
		}
		nextMarker = v.NextMarker
	}
	fmt.Println("\n文件列表檢索完成。")
	if len(allContents) > 0 {
		sort.Slice(allContents, func(i, j int) bool {
			ti, errTi := time.Parse(time.RFC3339, allContents[i].LastModified)
			tj, errTj := time.Parse(time.RFC3339, allContents[j].LastModified)
			if errTi != nil || errTj != nil {
				fmt.Printf("Error parsing time: %v, %v", errTi, errTj)
				return false
			}
			return ti.After(tj)
		})
		lastUpdatedObj := allContents[0]
		return lastUpdatedObj.Key, lastUpdatedObj.LastModified, nil
	} else {
		return "", "", fmt.Errorf("桶中沒(méi)有文件")
	}
}
func main() {
	client := createCOSClient(SecretId, SecretKey, BucketName, BucketRegion)
	key, lastModifiedTime, err := getLastUpdatedFileInfo(client)
	if err != nil {
		fmt.Printf("\n查詢(xún)失敗: %v\n", err)
		return
	}
	fmt.Printf("\n最后更新的文件:\n")
	fmt.Printf("文件路徑: %s\n", key)
	fmt.Printf("最后修改時(shí)間: %s\n", lastModifiedTime)
}

運(yùn)行main.go

go run main.go

繼續(xù)完善

繼續(xù)完善一下代碼:我需要把MaxKeys 提取出來(lái),增加一下輸出程序的運(yùn)行時(shí)間,并把輸出文件的時(shí)間戳調(diào)整為東八區(qū)時(shí)間:

package main
import (
	"context"
	"fmt"
	"github.com/tencentyun/cos-go-sdk-v5"
	"net/http"
	"net/url"
	"sort"
	"time"
)
const (
	SecretId     = "xxxx"
	SecretKey    = "xxxxx"
	BucketName   = "xxxxx"
	BucketRegion = "ap-shanghai"
	MaxKeys      = 1000 // 設(shè)置最大檢索數(shù)量的常量
)
var cstZone = time.FixedZone("CST", 8*3600) // 東八區(qū)時(shí)區(qū)
func createCOSClient(secretId, secretKey, bucketName, bucketRegion string) *cos.Client {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, bucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  secretId,
			SecretKey: secretKey,
		},
	})
	return client
}
func getLastUpdatedFileInfo(client *cos.Client) (key, lastModifiedTime string, err error) {
	c := context.Background()
	nextMarker := ""
	var allContents []cos.Object
	var retrievedCount int
	fmt.Println("開(kāi)始檢索文件列表...")
	for {
		opt := &cos.BucketGetOptions{
			MaxKeys: MaxKeys, // 使用常量 MaxKeys
			Marker:  nextMarker,
		}
		v, _, err := client.Bucket.Get(c, opt)
		if err != nil {
			return "", "", err
		}
		retrievedCount += len(v.Contents)
		fmt.Printf("已檢索 %d 個(gè)文件...\r", retrievedCount)
		allContents = append(allContents, v.Contents...)
		if !v.IsTruncated {
			break
		}
		nextMarker = v.NextMarker
	}
	fmt.Println("\n文件列表檢索完成。")
	if len(allContents) > 0 {
		sort.Slice(allContents, func(i, j int) bool {
			ti, errTi := time.Parse(time.RFC3339, allContents[i].LastModified)
			tj, errTj := time.Parse(time.RFC3339, allContents[j].LastModified)
			if errTi != nil || errTj != nil {
				fmt.Printf("Error parsing time: %v, %v", errTi, errTj)
				return false
			}
			return ti.After(tj)
		})
		lastUpdatedObj := allContents[0]
		// 將文件的 LastModified 時(shí)間字符串轉(zhuǎn)換為 time.Time
		t, err := time.Parse(time.RFC3339, lastUpdatedObj.LastModified)
		if err != nil {
			return "", "", fmt.Errorf("無(wú)法解析最后修改時(shí)間: %v", err)
		}
		// 轉(zhuǎn)換為東八區(qū)時(shí)間
		cstTime := t.In(cstZone).Format(time.RFC3339)
		return lastUpdatedObj.Key, cstTime, nil
	} else {
		return "", "", fmt.Errorf("桶中沒(méi)有文件")
	}
}
func main() {
	start := time.Now() // 程序開(kāi)始時(shí)間
	client := createCOSClient(SecretId, SecretKey, BucketName, BucketRegion)
	key, lastModifiedTime, err := getLastUpdatedFileInfo(client)
	if err != nil {
		fmt.Printf("\n查詢(xún)失敗: %v\n", err)
		return
	}
	fmt.Printf("\n最后更新的文件:\n")
	fmt.Printf("文件路徑: %s\n", key)
	fmt.Printf("最后修改時(shí)間: %s\n", lastModifiedTime)
	elapsed := time.Since(start) // 程序執(zhí)行時(shí)間
	fmt.Printf("\n程序運(yùn)行時(shí)間: %s\n", elapsed)
}

運(yùn)行修改后的main.go文件:

go run main.go

繼續(xù)發(fā)散

繼續(xù)發(fā)散一下,我需要輸出最后上傳的10個(gè)文件

package main
import (
	"context"
	"fmt"
	"github.com/tencentyun/cos-go-sdk-v5"
	"net/http"
	"net/url"
	"sort"
	"time"
)
// 請(qǐng)?zhí)鎿Q下面的假設(shè)值為實(shí)際的 SecretId、SecretKey、BucketName 和 Region。
const (
	SecretId      = "AKID7Mhwz45A9zqcCf4s07A7FIKKTlAiEf7M"
	SecretKey     = "KXbXL0unr2EaBsicYejj1GkEjO2jWOAg"
	BucketName    = "layabox-10028350" // 例如 "example-1250000000"
	BucketRegion  = "ap-shanghai"      // 例如 "ap-guangzhou"
	MaxKeys       = 1000               // 設(shè)置最大檢索數(shù)量的常量
	NumberOfFiles = 10                 // 需要獲取的最后更新的文件數(shù)量
)
var cstZone = time.FixedZone("CST", 8*3600) // 東八區(qū)時(shí)區(qū)
func createCOSClient(secretId, secretKey, bucketName, bucketRegion string) *cos.Client {
	u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, bucketRegion))
	b := &cos.BaseURL{BucketURL: u}
	client := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  secretId,
			SecretKey: secretKey,
		},
	})
	return client
}
func getLastUpdatedFileInfo(client *cos.Client, numberOfFiles int) ([]cos.Object, error) {
	c := context.Background()
	nextMarker := ""
	var allContents []cos.Object
	var retrievedCount int
	fmt.Println("開(kāi)始檢索文件列表...")
	for {
		opt := &cos.BucketGetOptions{
			MaxKeys: MaxKeys, // 使用常量 MaxKeys
			Marker:  nextMarker,
		}
		v, _, err := client.Bucket.Get(c, opt)
		if err != nil {
			return nil, err
		}
		retrievedCount += len(v.Contents)
		fmt.Printf("已檢索 %d 個(gè)文件...\r", retrievedCount)
		allContents = append(allContents, v.Contents...)
		if !v.IsTruncated {
			break
		}
		nextMarker = v.NextMarker
	}
	fmt.Println("\n文件列表檢索完成。")
	fmt.Printf("\n桶中總文件數(shù): %d\n", len(allContents))
	if len(allContents) > 0 {
		sort.Slice(allContents, func(i, j int) bool {
			ti, errTi := time.Parse(time.RFC3339, allContents[i].LastModified)
			tj, errTj := time.Parse(time.RFC3339, allContents[j].LastModified)
			if errTi != nil || errTj != nil {
				fmt.Printf("Error parsing time: %v, %v", errTi, errTj)
				return false
			}
			return ti.After(tj)
		})
		// 截取切片以獲取最后更新的numberOfFiles個(gè)文件
		if len(allContents) > numberOfFiles {
			allContents = allContents[:numberOfFiles]
		}
		// 返回最后更新的numberOfFiles個(gè)文件
		return allContents, nil
	} else {
		return nil, fmt.Errorf("桶中沒(méi)有文件")
	}
}
func main() {
	start := time.Now() // 程序開(kāi)始時(shí)間
	client := createCOSClient(SecretId, SecretKey, BucketName, BucketRegion)
	files, err := getLastUpdatedFileInfo(client, NumberOfFiles)
	if err != nil {
		fmt.Printf("\n查詢(xún)失敗: %v\n", err)
		return
	}
	fmt.Printf("\n最后更新的%d個(gè)文件:\n", NumberOfFiles)
	for _, file := range files {
		t, err := time.Parse(time.RFC3339, file.LastModified)
		if err != nil {
			fmt.Printf("無(wú)法解析文件 %s 的最后修改時(shí)間: %v\n", file.Key, err)
			continue
		}
		cstTime := t.In(cstZone).Format(time.RFC3339)
		fmt.Printf("文件路徑: %s\n", file.Key)
		fmt.Printf("最后修改時(shí)間: %s\n", cstTime)
	}
	elapsed := time.Since(start) // 程序執(zhí)行時(shí)間
	fmt.Printf("\n程序運(yùn)行時(shí)間: %s\n", elapsed)
}

其實(shí)也想過(guò)協(xié)程或者其他方式?但是奈何max-keys 最大是1000測(cè)試了一下沒(méi)有太大的提升放棄了…

總結(jié)

在這篇博客中,我們學(xué)習(xí)了如何使用騰訊云 COS Go SDK 查詢(xún)存儲(chǔ)桶中最新的文件信息。這包括如何創(chuàng)建COS客戶端,如何逐頁(yè)檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象。我們還展示了如何優(yōu)化用戶體驗(yàn),通過(guò)實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來(lái)改進(jìn)程序。

希望本文能幫助你在使用騰訊云 COS 時(shí)實(shí)現(xiàn)更高效的數(shù)據(jù)管理。

到此這篇關(guān)于使用騰訊云go sdk 查詢(xún)對(duì)象存儲(chǔ)中最新文件的文章就介紹到這了,更多相關(guān)騰訊云go sdk 查詢(xún)對(duì)象存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go數(shù)組與切片輕松掌握

    Go數(shù)組與切片輕松掌握

    在Java的核心庫(kù)中,集合框架可謂鼎鼎大名:Array、List、Set等等,隨便拎一個(gè)出來(lái)都值得開(kāi)發(fā)者好好學(xué)習(xí)如何使用甚至是背后的設(shè)計(jì)源碼。雖然Go語(yǔ)言沒(méi)有如此豐富的容器類(lèi)型,但也有一些基本的容器供開(kāi)發(fā)者使用,接下來(lái)讓我們認(rèn)識(shí)一下這些容器類(lèi)型吧
    2022-11-11
  • Go標(biāo)準(zhǔn)庫(kù)日志打印及同時(shí)輸出到控制臺(tái)與文件

    Go標(biāo)準(zhǔn)庫(kù)日志打印及同時(shí)輸出到控制臺(tái)與文件

    Go語(yǔ)言?xún)?nèi)置的log包實(shí)現(xiàn)了簡(jiǎn)單的日志服務(wù),下面這篇文章主要給大家介紹了關(guān)于Go標(biāo)準(zhǔn)庫(kù)日志打印及同時(shí)輸出到控制臺(tái)與文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 淺談golang并發(fā)操作變量安全的問(wèn)題

    淺談golang并發(fā)操作變量安全的問(wèn)題

    這篇文章主要介紹了淺談golang并發(fā)操作變量安全的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang函數(shù)的返回值實(shí)現(xiàn)

    golang函數(shù)的返回值實(shí)現(xiàn)

    本文主要介紹了golang函數(shù)的返回值實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 深入Golang之context的用法詳解

    深入Golang之context的用法詳解

    本篇文章主要介紹了深入Golang之context的用法詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 淺析Go語(yǔ)言中閉包的定義與使用

    淺析Go語(yǔ)言中閉包的定義與使用

    閉包是編程語(yǔ)言中的一個(gè)重要概念,它允許函數(shù)不僅僅是獨(dú)立的代碼塊,還可以攜帶數(shù)據(jù)和狀態(tài),本文將深入探討閉包的定義、用途和注意事項(xiàng),以及如何正確使用閉包,有需要的可以參考下
    2023-09-09
  • Go語(yǔ)言常用條件判斷空值邏輯的使用

    Go語(yǔ)言常用條件判斷空值邏輯的使用

    本文主要介紹了Go語(yǔ)言常用條件判斷空值邏輯的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明

    Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明

    這篇文章主要介紹了Go緩沖channel和非緩沖channel的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 一文帶你了解Go語(yǔ)言中的類(lèi)型斷言和類(lèi)型轉(zhuǎn)換

    一文帶你了解Go語(yǔ)言中的類(lèi)型斷言和類(lèi)型轉(zhuǎn)換

    在Go中,類(lèi)型斷言和類(lèi)型轉(zhuǎn)換是一個(gè)令人困惑的事情,他們似乎都在做同樣的事情。最明顯的不同點(diǎn)是他們具有不同的語(yǔ)法(variable.(type)?vs?type(variable)?)。本文我們就來(lái)深入研究一下二者的區(qū)別
    2022-09-09
  • 輕松管理多個(gè)Go版本之g工具安裝與使用方法

    輕松管理多個(gè)Go版本之g工具安裝與使用方法

    這篇文章主要介紹了輕松管理多個(gè)Go版本之g工具安裝與使用的相關(guān)資料,g是一個(gè)Linux、macOS、Windows下的命令行工具,可以提供一個(gè)便捷的多版本go環(huán)境的管理和切換,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11

最新評(píng)論

博客| 盱眙县| 县级市| 郧西县| 安宁市| 根河市| 嘉黎县| 汉阴县| 临夏县| 略阳县| 新蔡县| 萝北县| 中江县| 延吉市| 茶陵县| 安化县| 成都市| 太仆寺旗| 道孚县| 揭东县| 永德县| 仪征市| 高青县| 宜章县| 西畴县| 江华| 柞水县| 星座| 呼图壁县| 大渡口区| 佛山市| 射洪县| 淄博市| 莱芜市| 清徐县| 都江堰市| 醴陵市| 河东区| 雷山县| 安溪县| 农安县|