Heim  >  Artikel  >  Backend-Entwicklung  >  Warum hängt mein Go-Bedingungscode keine Bibliothek an Apex_Defaults an?

Warum hängt mein Go-Bedingungscode keine Bibliothek an Apex_Defaults an?

DDD
DDDOriginal
2024-10-28 13:21:30834Durchsuche

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

Go-Bedingungscode hängt keine Bibliothek an Apex an

Ein Entwickler ist auf ein Problem gestoßen, bei dem eine Go-Bedingungsimplementierung keine Bibliothek an apex_defaults anhängt . Nachfolgend finden Sie den bereitgestellten Code und die vorgeschlagene Lösung:

Go-Code:

<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>

Problem:

Die Bedingung Der Code hängt die Bibliothek libabcextractor nicht an apex_defaults an. Die Protokolle zeigen an, dass die bedingte Anweisung ausgeführt wird, die Shared-Object-Datei jedoch nicht generiert wird.

Lösung:

Das Problem liegt im nicht exportierten Feld native_shared_libs in die erste Struktur innerhalb des Props-Typs, die für die Reflexion verwendet wird. In Go kann Reflection nur auf exportierte Strukturfelder zugreifen, also solche, die mit einem Großbuchstaben beginnen.

Um dieses Problem zu beheben, kann der Entwickler das Feld „native_shared_libs“ ändern in:

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

Das obige ist der detaillierte Inhalt vonWarum hängt mein Go-Bedingungscode keine Bibliothek an Apex_Defaults an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn