将 K8s 的源码切换到第一个 commit(2c4b3a562ce) :
pkg/util/stringlist.go
package util
type StringList []string
func (sl *StringList) Set(value string) error {
for _, s := range strings.Split(value, ",") {
if len(s) == 0 {
return fmt.Errorf("value should not be an empty string")
}
*sl = append(*sl, s)
}
return nil
}
Set() 方法是将 value 的值,通过分号进行分隔,如果分隔有空的值,则会返回错误;
请先思考一个问题:
1)如果输入的 value 值为 "" 时,此时方法是返回 nil 还是 error ?
2)如果 value 为 "value1," 时,此时方法返回的是 nil 还是 error ?
在不编写代码测试,可以先分析下,再验证自己的答案;
代码验证如下:
func main() {
s := make(StringList, 0)
// 传入空值
if err := s.Set(""); err != nil {
fmt.Println(err)
}
// 传入 value1,
if err := s.Set("value,"); err != nil {
fmt.Println(err)
}
// 打印 s 的值
fmt.Printf("%+v\n", s)
}
执行结果:
[root@VM-145-179-centos k8s01-01]# ./k8s01-01
value should not be an empty string
value should not be an empty string
[value]
这里主要是 strings.Split() 函数的分析:
看 Split() 函数的注释,如果传入的是空字符串,返回切片的长度为 1;
这里的函数就会进入到 for 循环,所以传入空串,是返回 error 的错误;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有