golang 高阶函数使用 Functional Options

该博客展示了如何使用Go语言定义一个`Server`结构体来存储服务器配置信息,包括地址、端口、协议、超时时间和最大连接数。通过高阶函数模式,可以方便地设置和初始化这些配置,例如将协议更改为UDP并调整最大连接数。示例中创建了一个服务器实例,并打印了配置的协议和最大连接数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
    "crypto/tls"
    "fmt"
    "time"
)

// 业务实体

type Server struct {
    Addr     string
    Port     int
    Protocol string
    Timeout  time.Duration
    MaxConns int
    TLS      *tls.Config
}

// 高阶函数

type Option func(*Server)

func Protocol(p string) Option {
    return func(server *Server) {
        server.Protocol = p
    }
}

func Timeout(timeout time.Duration) Option {
    return func(server *Server) {
        server.Timeout = timeout
    }
}

func MaxConns(maxconns int) Option {
    return func(server *Server) {
        server.MaxConns = maxconns
    }
}

func TLS(tls *tls.Config) Option {
    return func(server *Server) {
        server.TLS = tls
    }
}

func NewServer(addr string, port int, options ...func(*Server)) (*Server, error) {
    serv := Server{
        Addr: addr,
        Port: port,
        Protocol: "tcp",
        Timeout: 30 * time.Second,
        MaxConns: 1000,
        TLS: nil,
    }

    for _, option := range options {
        option(&serv)
    }
    return &serv, nil
}

func main()  {
    server, _ := NewServer("127.0.0.1", 9999, Protocol("UDP"), MaxConns(100))
    fmt.Println(server.Protocol)
    fmt.Println(server.MaxConns)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自驱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值