» Go语言快速入门 » 2. 进阶篇 » 2.7 网络

网络

net 包提供了进行网络相关操作的基础设施,包括处理网络协议、地址处理、连接等功能。

简单的 HTTP 客户端

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	// 发起 HTTP GET 请求
	response, err := http.Get("https://jsonplaceholder.typicode.com/posts/1")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer response.Body.Close()

	// 读取响应体
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}

	fmt.Println(string(body))
}

简单的 HTTP 服务器

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	// 在此处理传入的 HTTP 请求
	fmt.Fprintf(w, "Hello, this is a simple HTTP server!")
}

func main() {
	// 为根端点 "/" 注册处理函数
	http.HandleFunc("/", handler)

	// 在端口 8080 上启动 HTTP 服务器
	fmt.Println("Server listening on port 8080...")
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		fmt.Println("Error:", err)
	}
}

简单的 TCP 服务器

package main

import (
	"fmt"
	"net"
)

func handleConnection(conn net.Conn) {
	// 处理传入的连接
	defer conn.Close()

	// 从连接中读取数据
	buffer := make([]byte, 1024)
	n, err := conn.Read(buffer)
	if err != nil {
		fmt.Println("Error reading:", err)
		return
	}

	fmt.Printf("Received: %s", buffer[:n])

	// 回应客户端
	conn.Write([]byte("Hello from the server!"))
}

func main() {
	// 在端口 8080 上监听传入的连接
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println("Error listening:", err)
		return
	}
	defer listener.Close()

	fmt.Println("Server listening on port 8080...")

	// 接受传入的连接
	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("Error accepting connection:", err)
			continue
		}

		// 在一个单独的 goroutine 中处理连接
		go handleConnection(conn)
	}
}