minio源码追踪

文章介绍了在Go语言中如何使用append初始化数组,如varctrlChans和varstatusChans。同时展示了错误处理的多种方式,包括对io.EOF的特殊处理。还涉及了json编码解码、读写文件操作以及字符串处理函数,如delimiter和ParseConfig函数。
摘要由CSDN通过智能技术生成
可以声明 类型 不初始化 通过append来初始化底层数组
var ctrlChans []chan<- string
var statusChans []<-chan error

ctrlChan, statusChan, storage := storageModule.Start()
ctrlChans = append(ctrlChans, ctrlChan)
statusChans = append(statusChans, statusChan)


断言相等
c.Assert(bytes.Equal(value, byteBuffer.Bytes()), Equals, true)
或
c.Assert(metadata.Size,Equals,len(value))



func (c *Config) WriteConfig() error {
   var file *os.File
   var err error
   c.configLock.Lock()
   defer c.configLock.Unlock()
   file, err = os.OpenFile(c.configPath, os.O_WRONLY, 0666)
   defer file.Close()
   if err != nil {
      return err
   }
   encoder := json.NewEncoder(file)
   encoder.Encode(c.Users)
   return nil
}


objects, isTruncated, err := server.storage.ListObjects(bucket, prefix, 1000)
switch err := err.(type) {
case nil: // success
   response := generateObjectsListResult(bucket, objects, isTruncated)
   w.Write(writeObjectHeadersAndResponse(w, response, acceptsContentType))
case mstorage.BucketNotFound:
   log.Println(err)
   w.WriteHeader(http.StatusNotFound)
   w.Write([]byte(err.Error()))
case mstorage.ImplementationError:
   log.Println(err)
   w.WriteHeader(http.StatusInternalServerError)
   w.Write([]byte(err.Error()))
default:
   w.WriteHeader(http.StatusBadRequest)
   w.Write([]byte(err.Error()))
}


err包含 io.EOF  Ignore EOF in ReadConfig() 

func (c *Config) ReadConfig() error {
   var file *os.File
   var err error

   c.configLock.RLock()
   defer c.configLock.RUnlock()

   file, err = os.OpenFile(c.configFile, os.O_RDONLY, 0666)
   defer file.Close()
   if err != nil {
      return err
   }

   users := make(map[string]User)
   decoder := json.NewDecoder(file)
   err = decoder.Decode(&users)
   switch err {
   case io.EOF:
      return nil
   case nil:
      c.Users = users
      return nil
   default:
      return err
   }
}


vals, _ := url.ParseQuery(req.URL.RawQuery)

buf := new(bytes.Buffer)


var resultsBuffer bytes.Buffer
resultsWriter := bufio.NewWriter(&resultsBuffer)


sort.Slice(list, func(i, j int) bool { return list[i].Name() < list[j].Name() })


func AppendUniqInt(slice []int, i int) []int {
   for _, ele := range slice {
      if ele == i {
         return slice
      }
   }
   return append(slice, i)
}

func AppendUniqStr(slice []string, i string) []string {
   for _, ele := range slice {
      if ele == i {
         return slice
      }
   }
   return append(slice, i)
}

func delimiter(object, delimiter string) string {
   readBuffer := bytes.NewBufferString(object)
   reader := bufio.NewReader(readBuffer)
   stringReader := strings.NewReader(delimiter)
   delimited, _ := stringReader.ReadByte()
   delimitedStr, _ := reader.ReadString(delimited)
   return delimitedStr
}
range read


policy, e := ioutil.ReadFile("/tmp/test.json")
iamp, e := iampolicy.ParseConfig(bytes.NewReader(policy))


func ParseConfig(reader io.Reader) (*Policy, error) {
   var iamp Policy

   decoder := json.NewDecoder(reader)
   decoder.DisallowUnknownFields()
   if err := decoder.Decode(&iamp); err != nil {
      return nil, Errorf("%w", err)
   }

   return &iamp, iamp.Validate()
}


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值