Go 操作数据
2025-02-17
在 Go 语言中,操作数据的方法通常涉及以下几个方面:
数据结构:Go 提供了多种内置的数据结构,如数组、切片、映射(map)、结构体(struct)等,用于存储和操作数据。
数据库操作:Go 语言通过标准库或第三方库(如
database/sql包)支持与数据库的交互。常见的数据库驱动包括mysql、postgres、sqlite等。文件操作:Go 提供了丰富的文件操作 API,可以读取、写入、修改文件内容。
网络操作:Go 语言在网络编程方面非常强大,支持 HTTP、TCP、UDP 等协议的通信,可以用于数据的传输和接收。
并发操作:Go 的并发模型(goroutine 和 channel)使得并发操作数据变得简单高效。
示例代码
1. 使用 database/sql 操作数据库
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 打开数据库连接
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
panic(err.Error())
}
defer db.Close()
// 查询数据
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
panic(err.Error())
}
defer rows.Close()
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
panic(err.Error())
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
// 插入数据
result, err := db.Exec("INSERT INTO users(name) VALUES(?)", "John Doe")
if err != nil {
panic(err.Error())
}
lastInsertId, err := result.LastInsertId()
if err != nil {
panic(err.Error())
}
fmt.Printf("Inserted ID: %d\n", lastInsertId)
}2. 文件操作
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
// 写入文件
data := []byte("Hello, Go!")
err := ioutil.WriteFile("example.txt", data, 0644)
if err != nil {
panic(err)
}
// 读取文件
content, err := ioutil.ReadFile("example.txt")
if err != nil {
panic(err)
}
fmt.Println(string(content))
// 删除文件
err = os.Remove("example.txt")
if err != nil {
panic(err)
}
}3. 并发操作
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second)
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, &wg)
}
wg.Wait()
}