當前位置: 首頁>>代碼示例>>Golang>>正文


Golang types.Type類代碼示例

本文整理匯總了Golang中k8s/io/kubernetes/cmd/libs/go2idl/types.Type的典型用法代碼示例。如果您正苦於以下問題:Golang Type類的具體用法?Golang Type怎麽用?Golang Type使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


在下文中一共展示了Type類的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: doStruct

func (g *genDeepCopy) doStruct(t *types.Type, sw *generator.SnippetWriter) {
    if len(t.Members) == 0 {
        // at least do something with in/out to avoid "declared and not used" errors
        sw.Do("_ = in\n_ = out\n", nil)
    }
    for _, m := range t.Members {
        t := m.Type
        if t.Kind == types.Alias {
            copied := *t.Underlying
            copied.Name = t.Name
            t = &copied
        }
        args := map[string]interface{}{
            "type": t,
            "name": m.Name,
        }
        switch t.Kind {
        case types.Builtin:
            sw.Do("out.$.name$ = in.$.name$\n", args)
        case types.Map, types.Slice, types.Pointer:
            sw.Do("if in.$.name$ != nil {\n", args)
            sw.Do("in, out := &in.$.name$, &out.$.name$\n", args)
            g.generateFor(t, sw)
            sw.Do("} else {\n", nil)
            sw.Do("out.$.name$ = nil\n", args)
            sw.Do("}\n", nil)
        case types.Struct:
            if hasDeepCopyMethod(t) {
                sw.Do("out.$.name$ = in.$.name$.DeepCopy()\n", args)
            } else if t.IsAssignable() {
                sw.Do("out.$.name$ = in.$.name$\n", args)
            } else if g.copyableAndInBounds(t) {
                funcName := g.funcNameTmpl(t)
                sw.Do(fmt.Sprintf("if err := %s(&in.$.name$, &out.$.name$, c); err != nil {\n", funcName), args)
                sw.Do("return err\n", nil)
                sw.Do("}\n", nil)
            } else {
                sw.Do("if newVal, err := c.DeepCopy(&in.$.name$); err != nil {\n", args)
                sw.Do("return err\n", nil)
                sw.Do("} else {\n", nil)
                sw.Do("out.$.name$ = *newVal.(*$.type|raw$)\n", args)
                sw.Do("}\n", nil)
            }
        default:
            sw.Do("if in.$.name$ == nil {\n", args)
            sw.Do("out.$.name$ = nil\n", args)
            sw.Do("} else if newVal, err := c.DeepCopy(&in.$.name$); err != nil {\n", args)
            sw.Do("return err\n", nil)
            sw.Do("} else {\n", nil)
            sw.Do("out.$.name$ = *newVal.(*$.type|raw$)\n", args)
            sw.Do("}\n", nil)
        }
    }
}
開發者ID:RyanBinfeng,項目名稱:kubernetes,代碼行數:54,代碼來源:deepcopy.go

示例2: isDirectlyAssignable

func isDirectlyAssignable(inType, outType *types.Type) bool {
    // TODO: This should maybe check for actual assignability between the two
    // types, rather than superficial traits that happen to indicate it is
    // assignable in the ways we currently use this code.
    return inType.IsAssignable() && (inType.IsPrimitive() || isSamePackage(inType, outType))
}
開發者ID:invenfantasy,項目名稱:kubernetes,代碼行數:6,代碼來源:conversion.go


注:本文中的k8s/io/kubernetes/cmd/libs/go2idl/types.Type類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。