用go 语言用mysql写一个简易的客户管理系统的具体步骤
时间: 2024-03-10 14:50:22 浏览: 17
下面是用 Go 语言和 MySQL 数据库实现一个简易的客户管理系统的基本步骤:
1. 安装 MySQL 数据库和 Go 语言的 MySQL 驱动程序。
2. 创建数据库和数据表,例如:
```
CREATE DATABASE customer;
USE customer;
CREATE TABLE IF NOT EXISTS customers (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
phone VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
3. 在 Go 语言中导入 "database/sql" 和 "github.com/go-sql-driver/mysql" 包。
4. 连接到 MySQL 数据库,例如:
```
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/customer")
if err != nil {
log.Fatal(err)
}
defer db.Close()
```
5. 定义结构体来表示客户数据,例如:
```
type Customer struct {
ID int
Name string
Email string
Phone string
}
```
6. 实现增删改查等基本操作的函数,例如:
```
// 插入客户数据
func (c *Customer) insert(db *sql.DB) error {
stmt, err := db.Prepare("INSERT INTO customers(name, email, phone) VALUES(?, ?, ?)")
if err != nil {
return err
}
defer stmt.Close()
res, err := stmt.Exec(c.Name, c.Email, c.Phone)
if err != nil {
return err
}
id, err := res.LastInsertId()
if err != nil {
return err
}
c.ID = int(id)
return nil
}
// 更新客户数据
func (c *Customer) update(db *sql.DB) error {
stmt, err := db.Prepare("UPDATE customers SET name=?, email=?, phone=? WHERE id=?")
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(c.Name, c.Email, c.Phone, c.ID)
if err != nil {
return err
}
return nil
}
// 删除客户数据
func (c *Customer) delete(db *sql.DB) error {
stmt, err := db.Prepare("DELETE FROM customers WHERE id=?")
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(c.ID)
if err != nil {
return err
}
return nil
}
// 查询客户数据
func (c *Customer) query(db *sql.DB) error {
row := db.QueryRow("SELECT name, email, phone FROM customers WHERE id=?", c.ID)
err := row.Scan(&c.Name, &c.Email, &c.Phone)
if err != nil {
return err
}
return nil
}
// 查询所有客户数据
func queryAll(db *sql.DB) ([]Customer, error) {
rows, err := db.Query("SELECT id, name, email, phone FROM customers")
if err != nil {
return nil, err
}
defer rows.Close()
var customers []Customer
for rows.Next() {
var c Customer
err := rows.Scan(&c.ID, &c.Name, &c.Email, &c.Phone)
if err != nil {
return nil, err
}
customers = append(customers, c)
}
return customers, nil
}
```
7. 在 main 函数中测试上述函数,例如:
```
func main() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/customer")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 插入客户数据
c1 := Customer{Name: "Alice", Email: "alice@example.com", Phone: "1234567890"}
err = c1.insert(db)
if err != nil {
log.Fatal(err)
}
// 更新客户数据
c1.Email = "alice2@example.com"
err = c1.update(db)
if err != nil {
log.Fatal(err)
}
// 删除客户数据
err = c1.delete(db)
if err != nil {
log.Fatal(err)
}
// 查询客户数据
c2 := Customer{ID: 2}
err = c2.query(db)
if err != nil {
log.Fatal(err)
}
fmt.Println(c2)
// 查询所有客户数据
customers, err := queryAll(db)
if err != nil {
log.Fatal(err)
}
fmt.Println(customers)
}
```