值得擁有的Go語(yǔ)言常用內(nèi)置包使用示例
Go語(yǔ)言內(nèi)置包
Go 語(yǔ)言作為一門快速、簡(jiǎn)潔的編程語(yǔ)言,擁有豐富的內(nèi)置包,這些包覆蓋了從文件處理到網(wǎng)絡(luò)通信的各個(gè)領(lǐng)域。
fmt 包:格式化輸入輸出
os 包:操作系統(tǒng)功能
net/http 包:HTTP 服務(wù)器和客戶端
time 包:時(shí)間和日期操作
encoding/json 包:JSON 數(shù)據(jù)的編解碼
sync 包:并發(fā)安全的同步原語(yǔ)
sort 包:排序切片和用戶自定義排序
strconv 包:字符串和基本數(shù)據(jù)類型之間的轉(zhuǎn)換
regexp 包:正則表達(dá)式
io 包:輸入輸出操作
math 包:數(shù)學(xué)函數(shù)和常量
strings 包:字符串操作
bufio 包:帶緩沖的 I/O 操作
1. fmt 包:格式化輸入輸出
fmt包提供了類似 C 語(yǔ)言 printf 和 scanf 的格式化輸入輸出函數(shù)
package main
import "fmt"
func main() {
name := "Go語(yǔ)言"
fmt.Printf("Hello, %s!\n", name)
}2. os 包:操作系統(tǒng)功能
os包提供了與操作系統(tǒng)進(jìn)行交互的功能,例如文件操作、環(huán)境變量等。
package main
import (
"fmt"
"os"
)
func main() {
hostname, err := os.Hostname()
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Hostname:", hostname)
}
}3. net/http 包:HTTP 服務(wù)器和客戶端
net/http包提供了 HTTP 服務(wù)器和客戶端的功能,可以用于構(gòu)建 Web 應(yīng)用程序。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Go HTTP server!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}4. time 包:時(shí)間和日期操作
time包提供了時(shí)間和日期的操作,可以用于處理各種時(shí)間相關(guān)的任務(wù)。
package main
import (
"fmt"
"time"
)
func main() {
// 獲取當(dāng)前時(shí)間
now := time.Now()
fmt.Println("Current Time:", now)
// 格式化時(shí)間
formattedTime := now.Format("2006-01-02 15:04:05")
fmt.Println("Formatted Time:", formattedTime)
// 解析時(shí)間
timeStr := "2023-10-12 10:30:00"
parsedTime, _ := time.Parse("2006-01-02 15:04:05", timeStr)
fmt.Println("Parsed Time:", parsedTime)
// 計(jì)算時(shí)間差
duration := parsedTime.Sub(now)
fmt.Println("Time Difference:", duration)
}5. encoding/json 包:JSON 數(shù)據(jù)的編解碼
encoding/json包提供了 JSON 數(shù)據(jù)的編碼(序列化)和解碼(反序列化)功能。
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
func main() {
person := Person{
Name: "Alice",
Age: 30,
Email: "alice@example.com",
}
// 編碼為JSON
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("JSON Data:", string(jsonData))
// 解碼JSON
var decodedPerson Person
err = json.Unmarshal(jsonData, &decodedPerson)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Decoded Person:", decodedPerson)
}6. sync 包:并發(fā)安全的同步原語(yǔ)
sync包提供了各種同步原語(yǔ),用于在多個(gè) goroutine 之間進(jìn)行安全的數(shù)據(jù)共享和通信。
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
var mu sync.Mutex
counter := 0
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}()
}
wg.Wait()
fmt.Println("Counter Value:", counter)
}7. sort 包:排序切片和用戶自定義排序
sort包提供了對(duì)切片進(jìn)行排序的功能,同時(shí)也支持自定義排序規(guī)則。
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{4, 2, 7, 1, 9, 5}
// 排序切片
sort.Ints(numbers)
fmt.Println("Sorted Numbers:", numbers)
// 自定義排序規(guī)則
fruits := []string{"apple", "banana", "orange", "grape"}
sort.Slice(fruits, func(i, j int) bool {
return len(fruits[i]) < len(fruits[j])
})
fmt.Println("Sorted Fruits by Length:", fruits)
}8. strconv 包:字符串和基本數(shù)據(jù)類型之間的轉(zhuǎn)換
strconv包提供了字符串和基本數(shù)據(jù)類型(例如 int、float64 等)之間的相互轉(zhuǎn)換功能。
package main
import (
"fmt"
"strconv"
)
func main() {
// 字符串轉(zhuǎn)整數(shù)
numStr := "123"
num, err := strconv.Atoi(numStr)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Parsed Integer:", num)
}
// 整數(shù)轉(zhuǎn)字符串
num = 456
numStr = strconv.Itoa(num)
fmt.Println("Integer to String:", numStr)
// 字符串轉(zhuǎn)浮點(diǎn)數(shù)
floatStr := "3.14"
floatNum, err := strconv.ParseFloat(floatStr, 64)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Parsed Float:", floatNum)
}
// 布爾值轉(zhuǎn)字符串
boolValue := true
boolStr := strconv.FormatBool(boolValue)
fmt.Println("Boolean to String:", boolStr)
}9. regexp 包:正則表達(dá)式
regexp包提供了正則表達(dá)式的功能,可以用于字符串的匹配和替換。
package main
import (
"fmt"
"regexp"
)
func main() {
text := "Hello, 12345 and 67890"
pattern := "[0-9]+"
re := regexp.MustCompile(pattern)
matches := re.FindAllString(text, -1)
fmt.Println("Matches:", matches)
}10. io 包:輸入輸出操作
io包提供了基本的輸入輸出接口和函數(shù),用于處理各種輸入輸出操作,包括文件、網(wǎng)絡(luò)、內(nèi)存等。
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
// 寫入文件
data := []byte("Hello, Go IO!")
err := ioutil.WriteFile("output.txt", data, 0644)
if err != nil {
fmt.Println("Error:", err)
return
}
// 讀取文件
fileContent, err := ioutil.ReadFile("output.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File Content:", string(fileContent))
// 字符串讀寫
r := strings.NewReader("Hello, Go IO!")
content, err := ioutil.ReadAll(r)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Read String:", string(content))
// 標(biāo)準(zhǔn)輸入輸出
fmt.Print("Enter your name: ")
var name string
fmt.Scanln(&name)
fmt.Println("Hello,", name)
}11. math 包:數(shù)學(xué)函數(shù)和常量
math包提供了各種數(shù)學(xué)函數(shù)和常量,包括三角函數(shù)、對(duì)數(shù)函數(shù)、常見常量等。
package main
import (
"fmt"
"math"
)
func main() {
// 計(jì)算正弦值
angle := math.Pi / 4
sinValue := math.Sin(angle)
fmt.Println("Sin(π/4):", sinValue)
// 計(jì)算自然對(duì)數(shù)
x := 2.0
logValue := math.Log(x)
fmt.Println("ln(2):", logValue)
// 圓周率和平方根
fmt.Println("π:", math.Pi)
fmt.Println("√2:", math.Sqrt(2))
}12. strings 包:字符串操作
strings 包提供了對(duì)字符串的各種操作,包括拼接、切割、替換、查找等。
package main
import (
"fmt"
"strings"
)
func main() {
// 字符串拼接
str1 := "Hello"
str2 := "Go"
result := strings.Join([]string{str1, str2}, " ")
fmt.Println("Joined String:", result)
// 字符串切割
sentence := "Hello, Go Language"
words := strings.Split(sentence, " ")
fmt.Println("Words:", words)
// 字符串替換
text := "Hello, World!"
newText := strings.Replace(text, "World", "Go", -1)
fmt.Println("Replaced Text:", newText)
// 字符串查找
contains := strings.Contains(text, "Go")
fmt.Println("Contains 'Go':", contains)
}13. bufio 包:帶緩沖的 I/O 操作
bufio 包提供了帶緩沖的 I/O 操作,可以提高讀寫文件的效率。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 寫入文件
file, err := os.Create("output.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString("Hello, bufio!")
writer.Flush()
// 讀取文件
reader := bufio.NewReader(file)
content, _ := reader.ReadString('\n')
fmt.Println("Read from File:", content)
}以上就是值得擁有的Go語(yǔ)言常用內(nèi)置包使用示例的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言內(nèi)置包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang中map的三種聲明定義方式實(shí)現(xiàn)
本文主要介紹了Golang中map的三種聲明定義方式實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法
本文主要介紹了golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Golang并發(fā)發(fā)送HTTP請(qǐng)求的各種方法
在 Golang 領(lǐng)域,并發(fā)發(fā)送 HTTP 請(qǐng)求是優(yōu)化 Web 應(yīng)用程序的一項(xiàng)重要技能,本文探討了實(shí)現(xiàn)此目的的各種方法,從基本的 goroutine 到涉及通道和sync.WaitGroup 的高級(jí)技術(shù),需要的朋友可以參考下2024-02-02
Go和RabbitMQ構(gòu)建高效的消息隊(duì)列系統(tǒng)
本文主要介紹了使用Go語(yǔ)言和RabbitMQ搭建一個(gè)簡(jiǎn)單的消息隊(duì)列系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
模塊一 GO語(yǔ)言基礎(chǔ)知識(shí)-庫(kù)源碼文件
這篇文章主要介紹了模塊一 GO語(yǔ)言基礎(chǔ)知識(shí)-庫(kù)源碼文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

