打卡go学习第一天

8.1

下面展示一些 代码。

复制代码
package main

import (
	"fmt"
	"net"
	"os"
	"time"
)

type Clock struct {
	Name   string
	Addr   string
}
func main() {
	clocks := []Clock{
		{Name: "New York", Addr: "localhost:8000"},
		{Name: "London", Addr: "localhost:8001"},
		{Name: "Tokyo", Addr: "localhost:8002"},
	}

	fmt.Printf("%-15s %s\n", "Location", "Time")

	for _, clock := range clocks {
		conn, err := net.Dial("tcp", clock.Addr)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error connecting to %s: %v\n", clock.Name, err)
			continue
		}
		defer conn.Close()

		// 读取服务器发送的时间
		var timeStr string
		_, err = fmt.Fscan(conn, &timeStr)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error reading time from %s: %v\n", clock.Name, err)
			continue
		}

		// 解析时间
		t, err := time.Parse(time.RFC3339, timeStr)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error parsing time from %s: %v\n", clock.Name, err)
			continue
		}

		fmt.Printf("%-15s %s\n", clock.Name, t.Format(time.RFC3339))
	}
}

8.2

下面展示一些 代码。

复制代码
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func handleClient(conn net.Conn) {
	defer conn.Close()

	reader := bufio.NewReader(conn)
	writer := bufio.NewWriter(conn)

	for {
		// 读取客户端发送的命令
		cmd, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("Error reading command:", err)
			return
		}

		// 去除命令中的空白字符
		cmd = strings.TrimSpace(cmd)

		// 解析并处理命令
		switch cmd {
		case "cd":
			// 处理 cd 命令
			_, err := writer.WriteString("Change directory command executed.\n")
			if err != nil {
				fmt.Println("Error writing response:", err)
				return
			}
			writer.Flush()
		case "quit":
			// 处理退出命令
			return
		default:
			_, err := writer.WriteString("Unknown command.\n")
			if err != nil {
				fmt.Println("Error writing response:", err)
				return
			}
			writer.Flush()
		}
	}
}

func main() {
	listener, err := net.Listen("tcp", ":2121")
	if err != nil {
		fmt.Println("Error starting server:", err)
		return
	}

	defer listener.Close()

	fmt.Println("Server started, waiting for connections...")

	for {
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("Error accepting connection:", err)
			continue
		}

		go handleClient(conn)
	}
}
相关推荐
行思理40 分钟前
go语言学习难度及适合学习的人群
开发语言·学习·golang
@大迁世界5 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
喵了几个咪10 小时前
GoWind ShortPlay 拆解:不用模型的推荐闭环——埋点回流、三路召回与已看去重
开发语言·后端·微服务·golang·gowind
喵了几个咪12 小时前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind
FungLeo12 小时前
成为全栈·Go 后端篇·用 Go 重写分层架构:领域包、装配根与最小抽象
golang·go·领域驱动设计·gorm·分层架构·成为全栈
北冥you鱼12 小时前
Go 语言 Ticker 定时任务全解析:原理、陷阱与最佳实践
开发语言·数据库·golang
我不会起名字32213 小时前
Go 服务升级 Go 1.2x 后 P99 变差:GMP 调度相关的 3 个变化
golang·go·gmp·调度·gomaxprocs
喵了几个咪14 小时前
GoWind CMS 拆解:给 NL2SQL 上四把锁——智能问数的安全边界
开发语言·后端·安全·微服务·golang·gowind
喵了几个咪1 天前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
l1t1 天前
测试用go语言执行脚本把数据保存到SQLite数据库
数据库·golang·sqlite