Maison  >  Article  >  développement back-end  >  Pourquoi mon code conditionnel Go n’ajoute-t-il pas de bibliothèque à Apex_Defaults ?

Pourquoi mon code conditionnel Go n’ajoute-t-il pas de bibliothèque à Apex_Defaults ?

DDD
DDDoriginal
2024-10-28 13:21:30833parcourir

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

Le code conditionnel Go n'ajoute pas de bibliothèque à Apex

Un développeur a rencontré un problème où une implémentation conditionnelle Go n'ajoute pas de bibliothèque à apex_defaults . Vous trouverez ci-dessous le code fourni et la solution proposée :

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>

Problème :

Le conditionnel le code n'ajoute pas la bibliothèque libabcextractor à apex_defaults. Les journaux indiquent que l'instruction conditionnelle est en cours d'exécution, mais que le fichier objet partagé n'est pas généré.

Solution :

Le problème réside dans le champ non exporté native_shared_libs dans la première structure dans le type d'accessoires utilisé pour la réflexion. Dans Go, la réflexion ne peut accéder qu'aux champs de structure exportés, qui sont ceux commençant par une lettre majuscule.

Pour résoudre ce problème, le développeur peut modifier le champ native_shared_libs en :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn