ホームページ  >  記事  >  バックエンド開発  >  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。