Rumah  >  Artikel  >  pembangunan bahagian belakang  >  CLI pertama saya dengan Go

CLI pertama saya dengan Go

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-09-25 22:08:221047semak imbas

My first CLI with Go

Saya sentiasa berasa agak bimbang untuk menulis tentang pengalaman saya. Nah, saya rasa saya boleh menanganinya sekarang. Ia adalah awal pagi pada bulan Ogos apabila saya memutuskan untuk menulis alat CLI hanya untuk "berlatih" Pergi kerana saya telah mempelajari asasnya beberapa hari sebelumnya. Saya tidak menonton banyak tutorial pada masa kini tetapi saya menonton Video Nana di Golang dan ia cukup hebat. Jadi, mari masuk terus.

Sebabnya

Saya ingin bereksperimen dengan Go untuk mempelajari modul os. Fikiran pertama yang terlintas di fikiran saya adalah untuk mencipta turborepo dengan Golang sebagai pelayan. Ya, saya tahu kami tidak boleh mengehoskannya dalam Vercel, tetapi ideanya adalah untuk mencipta pelayan yang pantas dan selamat dengan Golang. Kami boleh menggunakan proksi API dalam Vercel untuk menulis semula permintaan daripada pihak pelanggan. Walau bagaimanapun, anda akan dikehendaki untuk mengehoskan pelayan Go anda secara berasingan di beberapa tempat seperti Railway atau Render. Ini tidak mengikut peraturan seni bina mono repo, ia hanya mengekalkan semua kod di satu tempat dan membina pelayan yang kuat. Ia dinamakan turbo-g (turbo + go).

Nah, selepas mencipta projek templat, saya menyedari bahawa Turbo mempunyai beberapa masalah dengan muat semula panas dan banyak perkara lain. Jadi, akhirnya, saya menggugurkan idea itu dan terus mencipta sesuatu yang lain.

Apabila mencipta projek templat ini, saya melihat bahawa saya perlu menyediakan pelayan secara manual dan saya menggunakan gofiber kerana ia mempunyai fungsi seperti ekspres, dan sebagai pembangun tindanan MERN, saya mendapati ia sangat mudah untuk digunakan. Sekali saya terfikir untuk membuat penjana projek pelayan dalam Express juga, tetapi mereka sudah mempunyai satu, ia dipanggil penjana ekspres. Kemudian saya fikir mungkin ada perkara yang sama untuk Fiber juga. Tetapi apabila saya mencari dalam GitHub dengan topik:go-backend-template, saya hanya menemui templat pra-dibuat yang boleh anda klon dan gunakan untuk projek anda. Ketika itulah saya memutuskan untuk mencubanya.

Prosesnya

Membuat CLI dengan go adalah agak mudah, kerana kod go disusun menjadi boleh laku binari. Tetapi, saya tidak tahu cara membuat fail dan folder menggunakan modul os. Dalam JavaScript(NodeJs), kita boleh menggunakan modul fs untuk mengurus fail. Semuanya terima kasih kepada dokumen kerana membantu saya. Saya sudah tahu rupa projek asas belakang dalam Express dan Fiber juga. Pendekatan saya sangat mudah. Saya akan mencipta alat CLI yang akan menggunakan beberapa bendera seperti --init dan --name untuk nama projek dan ia akan menjana projek dan go.mod dengan gentian sebagai kebergantungan.

Kemudian saya terperangkap dalam perkara yang dipanggil templat. Templat ialah rangka fail go. Templat menyimpan kandungan fail. Sangat menarik untuk belajar tentang templat. Kemudian mudah untuk mengambil nama projek daripada bendera dan mencipta semua folder fail menggunakan os.MkdirAlland menghuraikan templat dengan modul teks/templat dan dapatkan kandungan untuk mencipta fail. Semua butiran modul ini boleh didapati dalam dokumen Golang yang saya nyatakan di atas. Kemudian ia dilakukan! ? Tetapi..

dirs := []string{"cmd", "internal/handlers", "internal/middleware", "internal/models", "internal/routes", "internal/services", "config"}
    for _, dir := range dirs {
        if err := os.MkdirAll(filepath.Join(projectPath, dir), os.ModePerm); err != nil {
            return fmt.Errorf("❗Failed to create directory %s: %w", dir, err)
        }
    }

Masalahnya

  • Saya mendapati tidak lama lagi bahawa saya tidak menggunakan github.com// sebagai nama modul yang merupakan masalah yang saya hadapi semasa saya belajar tentang modul go buat kali pertama. Kemudian saya belajar tentang laluan modul dari sini. Jadi, apa yang saya lakukan untuk menyelesaikan masalah adalah sangat mudah. Saya baru sahaja menambah bendera -gh untuk pengguna menambah Nama Pengguna GitHub mereka untuk menyusun modul dengan mengandaikan nama projek ialah repo GitHub.

  • Satu lagi masalah yang masih wujud iaitu saya tidak memberikan sebarang kod dalam fail templat middleware dan fail templat konfigurasi. Pengguna boleh menggunakan MongoDB atau PostgreSQL sebagai pangkalan data jadi tidak perlu menyediakan sebarang konfigurasi tunggal atau kedua-dua dalam templat. Nah, untuk menyelesaikan masalah ini saya telah mencipta isu dan sesiapa yang membaca blog ini boleh menyumbang untuk menyelesaikan masalah ini. Saya sudah memikirkan cara tetapi ini berpunca kepada masalah ketiga.

  • CLI boleh mengambil input pengguna yang dipanggil -db untuk mendapatkan pangkalan data pilihan pengguna seperti MongoDB atau PostgreSQL untuk membuat sambungan tiruan dalam templat Config. Tetapi, apabila kod berkembang untuk menyelesaikan masalah seperti ini, CLI tidak akan dapat digunakan. Ia sudah mempunyai 2 bendera yang diperlukan dan satu pilihan iaitu --init, -gh, dan -name, dan jika kita menambah bendera -db ia akan menjadi arahan yang sangat panjang. Untuk menyelesaikan masalah ini saya akan mengubah suai CLI sebagai satu interaktif seperti create-next-app. Selepas perubahan ini, kami boleh menambah banyak pilihan untuk penyesuaian. Saya sudah mengusahakan perkara ini. Jadi, jika anda ingin menyumbang, anda dialu-alukan. Anda boleh dapatkan isunya di sini.

  • 現時点での最後の問題は、ホット リロード モジュールです。ファイバー アプリを作成するときは常に、デフォルトでは変更リスナーがありません。ファイバーにはすでにこれがあり、私がそれについて知らない場合は、私がこれについては比較的初心者であることをお詫びしてください。これについて何かご存知のことがあれば、コメントでお知らせください。この問題を解決するために、プロジェクトに air を含めることを考え出しました。

終わり

これは 光学 の物語です。ただし、このブログの目的は、この小さなプロジェクトについて皆さんに知らせることであり、もしよろしければプロジェクトに貢献していただくよう呼びかけることでもあります。

旅は始まったばかりですが、これまでのところ非常に興味深いものです。たくさんのことを学びましたので、今後もさらに学びたいと思っています。初めてのブログなので、何か間違いや見落としがありましたら、ご容赦ください。次回はもっと良くなるでしょう。

皆さん、ブログを読んでいただきありがとうございます。もし興味があれば Optical に ⭐ を付けてください。また、貢献してくれる人がいる場合は共有してください。また、問題を見つけた場合や改善のアイデアがある場合は、ここで問題を作成できます

またよろしくお願いします。

Atas ialah kandungan terperinci CLI pertama saya dengan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn