golang學習知識點,golang自學

本文目錄一覽:

Golang:I/O 操作,千萬不要小瞧這些知識點

I/O 操作也叫輸入輸出操作。其中 I 是指 Input,O 是指 Output,用於讀或者寫數據的,有些語言中也叫流操作,是指數據通信的通道。

Golang 標準庫對 IO 的抽象非常精巧,各個組件可以隨意組合,可以作為介面設計的典範。

io 包中提供 I/O 原始操作的一系列介面。它主要包裝了一些已有的實現,如 os 包中的那些,並將這些抽象成為實用性的功能和一些其他相關的介面。

在 io 包中最重要的是兩個介面:Reader 和 Writer 介面,首先來介紹這讀的操作。

Reader 介面的定義,Read() 方法用於讀取數據。

Read 將 len(p) 個位元組讀取到 p 中。它返回讀取的位元組數 n(0 = n = len(p))以及任何遇到的錯誤。即使 Read 返回的 n len(p),它也會在調用過程

中使用 p 的全部作為暫存空間。若一些數據可用但不到 len(p) 個位元組,Read 會照例返回可用的東西,而不是等待更多。

當 Read 在成功讀取 n 0 個位元組後遇到一個錯誤或 EOF 情況,它就會返回讀取的位元組數,這種一般情況的一個例子就是 Reader 在輸入流結束時會返回一個非零的位元組數,可能的返回不是 err == EOF 就是 err == nil。無論如何,下一個 Read 都應當返回 0、EOF。

調用者應當總在考慮到錯誤 err 前處理 n 0 的位元組。這樣做可以在讀取一些位元組,以及允許的 EOF 行為後正確地處理 I/O 錯誤。

Read 的實現會阻止返回零位元組的計數和一個 nil 錯誤,調用者應將這種情況視作空操作。

ReaderFrom介面的定義,封裝了基本的 ReadFrom 方法。

ReadFrom 從 r 中讀取數據到對象的數據流中,直到 r 返回 EOF 或 r 出現讀取錯誤為止,返回值 n 是讀取的位元組數,返回值 err 就是 r 的返回值 err。

定義ReaderAt介面,ReaderAt 介面封裝了基本的 ReadAt 方法

ReadAt 從對象數據流的 off 處讀出數據到 p 中,忽略數據的讀寫指針,從數據的起始位置偏移 off 處開始讀取,如果對象的數據流只有部分可用,不足以填滿 p,則 ReadAt 將等待所有數據可用之後,繼續向 p 中寫入,直到將 p 填滿後再返回。

在這點上 ReadAt 要比 Read 更嚴格,返回讀取的位元組數 n 和讀取時遇到的錯誤,如果 n len(p),則需要返回一個 err 值來說明,為什麼沒有將 p 填滿(比如 EOF),如果 n = len(p),而且對象的數據沒有全部讀完,則 err 將返回 nil,如果 n = len(p),而且對象的數據剛好全部讀完,則 err 將返回 EOF 或者 nil(不確定)

file 類是在 os 包中的,封裝了底層的文件描述符和相關信息,同時封裝了 Read 和 Write 的實現。

讀取文件中的數據:

Writer 介面的定義,Write() 方法用於寫出數據。

Write 將 len(p) 個位元組從 p 中寫入到基本數據流中。它返回從 p 中被寫入的位元組數 n(0 = n = len(p))以及任何遇到的引起寫入提前停止的錯誤。若 Write 返回的 n len(p),它就必須返回一個非 nil 的錯誤。Write 不能修改此切片的數據,即便它是臨時的。

Seeker介面的定義,封裝了基本的 Seek 方法。

Seeker 用來移動數據的讀寫指針,Seek 設置下一次讀寫操作的指針位置,每次的讀寫操作都是從指針位置開始的。

whence 的含義:

如果 whence 為 0:表示從數據的開頭開始移動指針

如果 whence 為 1:表示從數據的當前指針位置開始移動指針

如果 whence 為 2:表示從數據的尾部開始移動指針

offset 是指針移動的偏移量

返回移動後的指針位置和移動過程中遇到的任何錯誤

WriterTo介面的定義,封裝了基本的 WriteTo 方法。

WriterTo 將對象的數據流寫入到 w 中,直到對象的數據流全部寫入完畢或遇到寫入錯誤為止。返回值 n 是寫入的位元組數,返回值 err 就是 w 的返回值 err。

定義WriterAt介面,WriterAt 介面封裝了基本的 WriteAt 方法

WriteAt 將 p 中的數據寫入到對象數據流的 off 處,忽略數據的讀寫指針,從數據的起始位置偏移 off 處開始寫入,返回寫入的位元組數和寫入時遇到的錯誤。如果 n len(p),則必須返回一個 err 值來說明為什麼沒有將 p 完全寫入

file 類是在 os 包中的,封裝了底層的文件描述符和相關信息,同時封裝了 Read 和 Write 的實現。

寫出數據到本地文件:

每天一個知識點:了解 Golang 引用數據類型

Golang的引用類型包括 slice、map 和 channel。它們有複雜的內部結構,除了申請內存外,還需要初始化相關屬性。對於引用類型,變數存儲的是一個地址,這個地址存儲最終的值。內存通常在堆上分配,通過GC回收。獲取指針類型所指向的值,使用:” * ” 取值符號 。比如:var *p int, 使用 *p 獲取 p 指向的值。

知識分享之Golang——精選的組件庫、組件列表,各種golang組件都可找到

知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進行共同學習。歡迎大家進行持續關注。

知識分享系列目前包含Java、Golang、Linux、Docker等等。

awesome-go 這個組件包含了各種golang中常用的組件,說白了就是一個精選的 Go 框架、庫和軟體的匯總表。

我們日常需要尋找各種golang組件時在這個列表中基本都可以快速找到。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243794.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:58
下一篇 2024-12-12 12:58

相關推薦

  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • 軟體設計師知識點詳解

    一、面向對象設計 面向對象編程(OOP)是一種編程思想,也是現今被廣泛應用的一種編程範式。它包括類、對象、封裝、繼承、多態等概念。 封裝是OOP的一個核心概念,它在軟體開發中起到了…

    編程 2025-04-24
  • Golang中使用strings.Split函數進行字元串分割的方法

    一、Split函數的基本用法 字元串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字元串也是一個基本的數據類型,而strings包提供了一些操作字元串的…

    編程 2025-04-23
  • Golang環境變數全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變數來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23
  • 深入下探golang http server

    Go語言已經成為了軟體開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Compacted:一個高性能的Golang緩存庫

    一、簡介 Compacted是一個使用Golang編寫的緩存庫,旨在提供高性能的內存緩存功能。相對於其他常見的緩存庫,Compacted在內存使用和性能方面都做了一定的優化。 緩存…

    編程 2025-04-23
  • Golang nil解析

    一、什麼是nil Nil是Golang語言中的一個預定義標識符,表示一個零值對象,通常表示一個空指針。Nil被定義為指針類型、函數類型、介面類型、map類型、Slice類型、Cha…

    編程 2025-04-23
  • Golang中文社區介紹

    Go語言或者叫Golang是一個開源項目,目前是由Google開發維護的一種靜態類型、並發安全、編譯型的編程語言。Go語言的特點是結構清晰、並發能力強、具有垃圾回收機制並且支持跨平…

    編程 2025-04-23
  • Java基礎知識點筆記

    一、數據類型 Java中的數據類型可以分為:整型、浮點型、字元型和布爾型。其中,整型包括byte、short、int和long,分別表示不同範圍的整數,如byte表示-128到12…

    編程 2025-04-22

發表回復

登錄後才能評論