值得擁有的Go語言常用內置包使用示例
Go語言內置包
Go 語言作為一門快速、簡潔的編程語言,擁有豐富的內置包,這些包覆蓋了從文件處理到網絡通信的各個領域。
fmt 包:格式化輸入輸出
os 包:操作系統(tǒng)功能
net/http 包:HTTP 服務器和客戶端
time 包:時間和日期操作
encoding/json 包:JSON 數(shù)據(jù)的編解碼
sync 包:并發(fā)安全的同步原語
sort 包:排序切片和用戶自定義排序
strconv 包:字符串和基本數(shù)據(jù)類型之間的轉換
regexp 包:正則表達式
io 包:輸入輸出操作
math 包:數(shù)學函數(shù)和常量
strings 包:字符串操作
bufio 包:帶緩沖的 I/O 操作
1. fmt 包:格式化輸入輸出
fmt包提供了類似 C 語言 printf 和 scanf 的格式化輸入輸出函數(shù)
package main
import "fmt"
func main() {
name := "Go語言"
fmt.Printf("Hello, %s!\n", name)
}2. os 包:操作系統(tǒng)功能
os包提供了與操作系統(tǒng)進行交互的功能,例如文件操作、環(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 服務器和客戶端
net/http包提供了 HTTP 服務器和客戶端的功能,可以用于構建 Web 應用程序。
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 包:時間和日期操作
time包提供了時間和日期的操作,可以用于處理各種時間相關的任務。
package main
import (
"fmt"
"time"
)
func main() {
// 獲取當前時間
now := time.Now()
fmt.Println("Current Time:", now)
// 格式化時間
formattedTime := now.Format("2006-01-02 15:04:05")
fmt.Println("Formatted Time:", formattedTime)
// 解析時間
timeStr := "2023-10-12 10:30:00"
parsedTime, _ := time.Parse("2006-01-02 15:04:05", timeStr)
fmt.Println("Parsed Time:", parsedTime)
// 計算時間差
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ā)安全的同步原語
sync包提供了各種同步原語,用于在多個 goroutine 之間進行安全的數(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包提供了對切片進行排序的功能,同時也支持自定義排序規(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ù)類型之間的轉換
strconv包提供了字符串和基本數(shù)據(jù)類型(例如 int、float64 等)之間的相互轉換功能。
package main
import (
"fmt"
"strconv"
)
func main() {
// 字符串轉整數(shù)
numStr := "123"
num, err := strconv.Atoi(numStr)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Parsed Integer:", num)
}
// 整數(shù)轉字符串
num = 456
numStr = strconv.Itoa(num)
fmt.Println("Integer to String:", numStr)
// 字符串轉浮點數(shù)
floatStr := "3.14"
floatNum, err := strconv.ParseFloat(floatStr, 64)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Parsed Float:", floatNum)
}
// 布爾值轉字符串
boolValue := true
boolStr := strconv.FormatBool(boolValue)
fmt.Println("Boolean to String:", boolStr)
}9. regexp 包:正則表達式
regexp包提供了正則表達式的功能,可以用于字符串的匹配和替換。
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ù),用于處理各種輸入輸出操作,包括文件、網絡、內存等。
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))
// 標準輸入輸出
fmt.Print("Enter your name: ")
var name string
fmt.Scanln(&name)
fmt.Println("Hello,", name)
}11. math 包:數(shù)學函數(shù)和常量
math包提供了各種數(shù)學函數(shù)和常量,包括三角函數(shù)、對數(shù)函數(shù)、常見常量等。
package main
import (
"fmt"
"math"
)
func main() {
// 計算正弦值
angle := math.Pi / 4
sinValue := math.Sin(angle)
fmt.Println("Sin(π/4):", sinValue)
// 計算自然對數(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 包提供了對字符串的各種操作,包括拼接、切割、替換、查找等。
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語言常用內置包使用示例的詳細內容,更多關于Go語言內置包的資料請關注腳本之家其它相關文章!

