一、Golang的并发优势

1.1 Goroutine

package main

import (
	"fmt"
	"sync"
)

func processImage(imageURL string, wg *sync.WaitGroup) {
	defer wg.Done()
	// 处理图片逻辑...
	fmt.Printf("处理图片:%s\n", imageURL)
}

func main() {
	var wg sync.WaitGroup
	urls := []string{"image1.jpg", "image2.jpg", "image3.jpg"}
	for _, url := range urls {
		wg.Add(1)
		go processImage(url, &wg)
	}
	wg.Wait()
}

1.2 Channel

package main

import (
	"fmt"
	"sync"
)

func processImage(imageURL string, ch chan<- string) {
	// 处理图片逻辑...
	ch <- imageURL
}

func main() {
	ch := make(chan string, 3)
	var wg sync.WaitGroup
	urls := []string{"image1.jpg", "image2.jpg", "image3.jpg"}
	for _, url := range urls {
		wg.Add(1)
		go func(imageURL string) {
			defer wg.Done()
			processImage(imageURL, ch)
		}(url)
	}
	go func() {
		wg.Wait()
		close(ch)
	}()

	for img := range ch {
		fmt.Printf("返回图片:%s\n", img)
	}
}

二、图片存储与读取

2.1 使用本地文件存储

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func readImageFromFile(imagePath string) ([]byte, error) {
	data, err := ioutil.ReadFile(imagePath)
	if err != nil {
		return nil, err
	}
	return data, nil
}

func main() {
	imagePath := "image.jpg"
	data, err := readImageFromFile(imagePath)
	if err != nil {
		fmt.Println("读取图片失败:", err)
		return
	}
	fmt.Println("图片数据读取成功")
}

2.2 使用数据库存储

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func insertImage(db *sql.DB, imagePath string) error {
	stmt, err := db.Prepare("INSERT INTO images (path) VALUES (?)")
	if err != nil {
		return err
	}
	defer stmt.Close()

	_, err = stmt.Exec(imagePath)
	if err != nil {
		return err
	}
	return nil
}

func main() {
	db, err := sql.Open("mysql", "user:password@/dbname")
	if err != nil {
		fmt.Println("连接数据库失败:", err)
		return
	}
	defer db.Close()

	imagePath := "image.jpg"
	err = insertImage(db, imagePath)
	if err != nil {
		fmt.Println("插入图片失败:", err)
		return
	}
	fmt.Println("图片插入成功")
}

三、图片处理与返回

3.1 使用HTTP响应返回

”`go package main

import (

"fmt"
"io/ioutil"
"net/http"

)

imagePath := "image.jpg"
data, err := ioutil.ReadFile(imagePath)
if err != nil {
	http.Error(w, "图片读取失败