You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Go语言优雅解析Kafka连接URI以获取用户名密码及主机信息

实现方案

用Go标准库net/url就能直接解析符合RFC 3986规范的URI,不需要引入任何第三方依赖,代码简洁可靠。


示例代码

package main

import (
	"fmt"
	"net/url"
)

// 解析kafka连接URI,返回用户名、密码、主机地址
func parseKafkaURI(uriStr string) (username, password, hostAddr string, err error) {
	// 1. 标准库解析URI
	uri, err := url.Parse(uriStr)
	if err != nil {
		return "", "", "", fmt.Errorf("parse uri failed: %w", err)
	}

	// 可选:校验scheme是否为kafka,避免传入其他类型的地址
	if uri.Scheme != "kafka" {
		return "", "", "", fmt.Errorf("unsupported scheme: %s, expected kafka", uri.Scheme)
	}

	// 2. 提取用户名和密码
	if uri.User != nil {
		username = uri.User.Username()
		password, _ = uri.User.Password()
	}

	// 3. 提取主机地址,直接返回ip:port格式的内容
	hostAddr = uri.Host
	return
}

func main() {
	// 模拟从etcd读取到的配置
	kafkaURI := "kafka://user:passwd@10.10.172.222:9092?mechanism=PLAIN&protocol=SASL_PLAINTEXT"

	user, pwd, addr, err := parseKafkaURI(kafkaURI)
	if err != nil {
		panic(err)
	}

	fmt.Printf("用户名:%s\n密码:%s\n主机地址:%s\n", user, pwd, addr)
}

补充说明

  • 如果你的配置存在多broker地址,比如kafka://user:passwd@10.10.172.222:9092,10.10.172.223:9092?xxx格式,uri.Host也会完整返回逗号分隔的所有地址,需要拆分的话自行用strings.Split(addr, ",")处理即可
  • 如果需要获取URI后的参数,直接调用uri.Query().Get("mechanism")就能拿到对应参数值

内容的提问来源于stack exchange,提问作者CharmCcc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:36:04