网络库
1、net/http
net/http是Go语言中最基础的网络库,提供了HTTP客户端和服务器端的支持,它简单易用,可以方便地实现HTTP请求和响应。
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://www.example.com")
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Response:", string(body))
}
2、gorilla/mux
gorilla/mux是一个轻量级的Web框架中间件,提供了路由管理和参数解析功能,它可以简化Web应用的开发流程。
Go
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World!")
})
http.ListenAndServe(":8080", router)
}
并发库
1、goroutines/channel
goroutines/channel是一个基于通道机制的并发库,提供了同步原语和通信机制,它可以方便地实现线程间的通信和任务调度。
Go
package main
import (
"fmt"
"time"
)
func worker(id int, jobs <-chan int, results chan<int) {
for j := range jobs {
fmt.Printf("Worker %d processing job %d
", id, j)
time.Sleep(time.Second)
results <j * 2
}
}
func main() {
const numJobs = 500000000 // 需要处理的任务数量较大时使用较大的值避免内存不足问题
jobs := make(chan int, numJobs) // 创建一个缓冲区大小为numJobs的通道用于传递任务给worker函数执行
results := make(chan int, numJobs) // 创建一个缓冲区大小为numJobs的通道用于接收worker函数处理后的结果并输出到控制台或者保存到文件中进行后续处理操作,这里为了演示方便直接输出到控制台,如果需要处理大量数据则可以使用缓冲区来减少I/O操作次数从而提高性能,另外需要注意的是如果使用了缓冲区则需要确保通道的大小足够大以避免数据丢失的问题,否则会导致数据堆积在缓冲区中无法及时处理而导致程序崩溃,因此在使用通道时需要根据实际情况合理设置通道的大小,同时还需要注意通道的关闭操作以避免资源泄漏,最后还需要考虑如何优雅地退出程序以及如何处理异常情况等问题。