Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana cara menggunakan penggantian rekursif dengan betul dalam go.mod golang?

Bagaimana cara menggunakan penggantian rekursif dengan betul dalam go.mod golang?

WBOY
WBOYke hadapan
2024-02-08 23:50:36533semak imbas

如何在 golang 的 go.mod 中正确使用递归替换?

Apabila menggunakan golang’s go.mod, penggunaan penggantian rekursif yang betul adalah isu penting. Editor PHP Yuzai memberi anda beberapa penyelesaian. Penggantian rekursif merujuk kepada kaedah menggantikan modul dengan direktori tempatan dalam fail go.mod untuk penyahpepijatan dan pengubahsuaian semasa pembangunan. Walau bagaimanapun, jika modul yang diganti bergantung pada modul lain, ia mungkin menyebabkan beberapa masalah. Dengan menggunakan penggantian rekursif dengan betul, anda boleh mengelakkan masalah ini dan memastikan kebergantungan projek anda berfungsi dengan baik. Dalam artikel ini, kami akan membincangkan cara menggunakan penggantian rekursif dengan betul dalam go.mod dan memberikan beberapa petua dan pertimbangan praktikal.

Kandungan soalan

Saya mahukan struktur projek seperti ini:

src/github.com/myname/myproject/
- tl:
    - constructor
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/constructor

            require github.com/myname/myproject v0.0.0
            require github.com/myname/myproject/tl/types v0.0.0
            require github.com/myname/myproject/tl/types/account v0.0.0
            require github.com/myname/myproject/tl/types/auth v0.0.0
            require github.com/myname/myproject/tl/types/bots v0.0.0

            replace github.com/myname/myproject v0.0.0 => ./../..
            replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
            replace github.com/myname/myproject/tl/types/account v0.0.0 => ./../types/account
            replace github.com/myname/myproject/tl/types/auth v0.0.0 => ./../types/auth
            replace github.com/myname/myproject/tl/types/channels v0.0.0 => ./../types/channels
    - crcs
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/crcs

    - functions
        - account
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/account

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - auth
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/auth

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - bots
            - someghing.go
            - go.mod:
                module github.com/myname/myproject/tl/functions/bots

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/functions

            require github.com/myname/myproject/tl/crcs v0.0.0
            require github.com/myname/myproject v0.0.0
            require github.com/myname/myproject/tl/types v0.0.0

            replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
            replace github.com/myname/myproject v0.0.0 => ./../..
            replace github.com/myname/myproject/tl/types v0.0.0 => ./../types
    - types
        - account
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/account

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..

        - auth
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/auth

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..
        - channels
            - something.go
            - go.mod:
                module github.com/myname/myproject/tl/types/channels

                require github.com/myname/myproject/tl/crcs v0.0.0
                require github.com/myname/myproject v0.0.0
                require github.com/myname/myproject/tl/types v0.0.0

                replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs
                replace github.com/myname/myproject v0.0.0 => ./../../..
                replace github.com/myname/myproject/tl/types v0.0.0 => ./..
        - someghing.go
        - go.mod:
            module github.com/myname/myproject/tl/types

            require github.com/myname/myproject/tl/crcs v0.0.0
            require github.com/myname/myproject v0.0.0

            replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs
            replace github.com/myname/myproject v0.0.0 => ./../..
- something.go
- go.mod:
    module github.com/myname/myproject

    [some external dependencies]
    require github.com/myname/myproject/tl/types v0.0.0
    replace github.com/myname/myproject/l/types v0.0.0 => ./tl/types

Ini tidak berfungsi. Saya menggunakan idea jetbrains dan ia melaksanakan senarai go pada semua (sub) modul dan memberitahu saya ralat berikut:

go: github.com/myname/myproject/tl/[email protected] requires
    github.com/myname/myproject/tl/[email protected]: reading github.com/myname/myproject/tl/crcs/go.mod at revision tl/crcs/v0.0.0: unknown revision tl/crcs/v0.0.0

Saya tidak faham mengapa ini berlaku, nampaknya ia cuba mendapatkan modul dari repositori walaupun semuanya diganti secara tempatan. Saya terbuka kepada cadangan selain daripada mengubah struktur projek. Saya perlu boleh menggunakan perkara seperti account.sometype pada masa hadapan, jadi meletakkan segala-galanya dalam satu fail akan menyusahkan.

Konteks: Saya sedang membina perpustakaan mtproto untuk telegram yang mempunyai mod tl di mana setiap "permintaan"/"kelas" berada dalam ruang nama sendiri (cth. "akaun", "saluran") (atau dalam ruang nama global , contohnya saya functionstypes sewajarnya) (kerana terdapat lebih daripada 1900 fungsi/kelas ini, masing-masing mempunyai pembina dan parameternya sendiri, jadi meletakkan segala-galanya dalam satu modul akan menjadi sukar untuk digunakan)

Fail dalam folder tl ialah kod go yang dijana secara automatik daripada mod tl.

Penyelesaian

Terima kasih kepada Dekan kerana menunjukkan bahawa anda boleh memasukkan berbilang pakej dalam modul (bagaimana?). Ia menyelesaikan masalah saya sambil mengekalkan struktur yang sama.

Atas ialah kandungan terperinci Bagaimana cara menggunakan penggantian rekursif dengan betul dalam go.mod golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam