首页  >  文章  >  后端开发  >  为什么我的 Go 条件代码没有将库附加到 Apex_Defaults?

为什么我的 Go 条件代码没有将库附加到 Apex_Defaults?

DDD
DDD原创
2024-10-28 13:21:30834浏览

Why is my Go Conditional Code Not Appending a Library to Apex_Defaults?

Go 条件代码未将库附加到 Apex

开发人员遇到了 Go 条件实现未将库附加到 apex_defaults 的问题。下面是提供的代码和建议的解决方案:

Go 代码:

<code class="go">package my_apex

import (
    "android/soong/android"
    "android/soong/apex"
    "fmt"
    "strings"
)

func globalFlags(ctx android.BaseContext) []string {
    var native_shared_libs []string
    if strings.Contains(ctx.AConfig().DeviceName(), "my_apex_device") {
        fmt.Println("Condition executed...")
        native_shared_libs = append(native_shared_libs, "libabcextractor")
    }
    return native_shared_libs
}

func myApexFlagsDefaults(ctx android.LoadHookContext) {
    type props struct {
        Multilib struct {
            First struct {
                native_shared_libs []string
            }
        }
    }
    p := &props{}
    p.Multilib.First.native_shared_libs = globalFlags(ctx)
    ctx.AppendProperties(p)
}

func myApexFlagsDefaultsFactory() android.Module {
    module := apex.DefaultsFactory()
    android.AddLoadHook(module, myApexFlagsDefaults)
    return module
}

func init() {
    fmt.Println("Registering module type...")
    android.RegisterModuleType("my_apex_defaults", myApexFlagsDefaultsFactory)
}</code>

问题:

条件代码未将库 libabcextractor 附加到 apex_defaults。日志显示条件语句正在执行,但没有生成共享对象文件。

解决方案:

问题出在未导出的字段native_shared_libs中用于反射的 props 类型中的第一个结构体。在 Go 中,反射只能访问导出的结构体字段,即以大写字母开头的结构体字段。

要解决此问题,开发者可以将 native_shared_libs 字段更改为:

<code class="go">type props struct {
    Multilib struct {
        First struct {
           Native_shared_libs  []string
        }
    }
}</code>

以上是为什么我的 Go 条件代码没有将库附加到 Apex_Defaults?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn