cari
Rumahpembangunan bahagian belakangGolangApl Simple Go CLI-Everything

Hai Kawan-kawan!

Saya tidak menulis blog di Dev selama lebih 2 tahun! Sudah agak lama jadi maafkan saya jika kemahiran menaip saya telah merosot dari semasa ke semasa.

Saya sedang belajar Go dan menerima senarai projek untuk disiapkan dan dikongsi, salah satu daripada ini adalah aplikasi cli-todo Golang mudah yang membolehkan seseorang menambah tugasan pada senarai tugasan dan mencapai satu set asas kefungsian pada tugasan ini.

Ini termasuk:

1) Penyenaraian Tugas
2) Menambah Lebih Banyak Tugas
3) Mengubahsuai Tugasan Ini
4) Membuat Tugasan Selesai

Malangnya, saya tidak mempunyai nama yang menarik untuknya ? kerana ia direka bentuk untuk menjadi apl yang ringan dan mudah digunakan yang boleh disiapkan oleh seseorang dalam sehari. Walaupun anda seorang pemula.

Simple Go CLI-Todo App

~ Kod Sumber Projek: https://github.com/SirTingling/cloudprojects/tree/main/go-cli-todo-app

Mari Mulakan

Seperti biasa, penciptaan main.go kami. Setelah ini disediakan, kami perlu menentukan struktur dan kefungsian tugas kami. Saya melakukannya dalam todo.go yang berasingan

type Todo struct {
    Title       string
    Completed   bool
    CreatedAt   time.Time
    CompletedAt *time.Time
}

dengan sekeping untuk menampung tugas kami

type Todos []Todo

Kemudian kami memerlukan pelaksanaan kaedah kefungsian utama, yang termasuk:

  • tambah
func (todos *Todos) add(title string) {
    todo := Todo{
        Title:       title,
        Completed:   false,
        CompletedAt: nil,
        CreatedAt:   time.Now(),
    }

    *todos = append(*todos, todo)
}

Mencipta objek Todo dengan tajuk, menetapkan status Selesai kepada palsu dan menambahkannya pada kepingan Todos.

  • padam
func (todos *Todos) delete(index int) error {
    t := *todos

    if err := t.validateIndex(index); err != nil {
        return err
    }

    *todos = append(t[:index], t[index+1:]...)

    return nil
}

Mengesahkan indeks, kemudian menggunakan penghirisan untuk mengalih keluar item daripada senarai Todos.

  • togol
func (todos *Todos) toggle(index int) error {
    if err := todos.validateIndex(index); err != nil {
        return err
    }

    t := *todos
    todo := &t[index]

    if !todo.Completed {
        completedTime := time.Now()
        todo.CompletedAt = &completedTime
    } else {
        todo.CompletedAt = nil
    }

    todo.Completed = !todo.Completed
    return nil
}

Mengesahkan indeks, membalikkan boolean Selesai dan mengemas kini cap waktu CompletedAt dengan sewajarnya.

Kaedah selebihnya mengikut fungsi yang hampir sama, jika ada masalah, sila semak kod sumber

Menjalankan Apl

Isu biasa dengan banyak apl tugasan yang berasaskan cli ialah ia tidak begitu menawan. Dengan bantuan pakej pihak ketiga yang dipanggil aquasecurity/jadual senarai tugasan akan dipaparkan dengan kemas.

keselamatan akua/meja

Ia boleh dipasang dengan:

go get github.com/aquasecurity/table

Kemudian saya membuat kaedah untuk memaparkan todos menggunakan kaedah dari luar pakej. Terutamanya SetRowLines, SetHeaders, New, AddRow & Render adalah yang paling banyak digunakan dalam kes saya.

func (todos *Todos) print() {
    table := table.New(os.Stdout)
    table.SetRowLines(false)
    table.SetHeaders("#", "Title", "Completed", "Created At", "Completed At")

    for index, t := range *todos {
        completed := "❌"
        completedAt := ""

        if t.Completed {
            completed = "✅"
            if t.CompletedAt != nil {
                completedAt = t.CompletedAt.Format(time.RFC1123) //time standard
            }
        }

        table.AddRow(strconv.Itoa(index), t.Title, completed, t.CreatedAt.Format(time.RFC1123), completedAt)
    }

    table.Render()
}

Kaedah cetakan adalah cara yang kemas untuk menunjukkan senarai todos dalam terminal. Ia mencipta jadual dengan lajur untuk perkara seperti nombor tugasan, tajuk, sama ada ia telah selesai, apabila ia dibuat dan apabila ia telah selesai.

Ia melalui setiap item tugasan, menyemak sama ada ia selesai atau tidak, dan menambah ✅ jika ia telah selesai atau ❌ jika ia tidak. Sekiranya tugas itu selesai, ia juga menunjukkan tarikh dan masa yang tepat ia telah disiapkan.

Setelah semua baris sedia, ia mencetak jadual dalam format yang bersih dan boleh dibaca. Sangat berguna untuk melihat status semua tugas pengguna dengan pantas dengan pantas!

Bagaimana pula dengan menyimpan todos ini?

Jadi saya berpendapat bahawa fungsi menyimpan todos secara setempat untuk katakan fail, dalam kes ini, todos.json, dan kemudian membaca daripada sana adalah idea yang baik. Pada asasnya mempunyai beberapa tahap kegigihan data kami mengenai setiap dan semua tugasan.

Kami boleh menambahkan fungsi ini pada fail sedia ada, tetapi saya fikir adalah idea yang baik untuk memisahkan kebimbangan.

Saya menambahkan storage.go, ia boleh dipanggil apa sahaja yang anda mahu store.go, persist.go, dsb.

Saya memilih JSON tetapi prinsip yang sama biasanya digunakan pada mana-mana format data yang anda mahu simpan data juga.

type Todo struct {
    Title       string
    Completed   bool
    CreatedAt   time.Time
    CompletedAt *time.Time
}
  • Terdapat struct Storan yang menjejaki fail yang sedang digunakan.

  • Fungsi NewStorage membantu menyediakan perkara dengan hanya memberikannya nama fail.

  • Kaedah Simpan mengambil data, mengubahnya menjadi JSON yang cantik dan menulisnya pada fail (todos.json). Jika berlaku kesilapan, ia memberitahu kami dengan ralat.

  • Kaedah Muat melakukan sebaliknya—membaca fail, membongkar JSON dan mengisi data fail dengan data.

Ini cara yang mudah dan boleh diguna semula untuk mengendalikan menyimpan dan memuatkan apa-apa jenis data tanpa memerlukan pangkalan data atau apa-apa yang mewah.

Dari sini saya menggunakan NewStorage dalam main.go untuk menambahkan beberapa todos pada senarai saya dan menyimpannya yang kini boleh dilihat dalam todos.json saya

type Todos []Todo

func (todos *Todos) add(title string) {
    todo := Todo{
        Title:       title,
        Completed:   false,
        CompletedAt: nil,
        CreatedAt:   time.Now(),
    }

    *todos = append(*todos, todo)
}

Untuk arahan, saya tidak membuat apa-apa yang mewah. Saya menentukan bendera yang saya akan gunakan sebagai struct

func (todos *Todos) delete(index int) error {
    t := *todos

    if err := t.validateIndex(index); err != nil {
        return err
    }

    *todos = append(t[:index], t[index+1:]...)

    return nil
}

kemudian fungsi mudah menggunakan pakej bendera senaraikan bendera ini, berikan lebih banyak butiran & huraian dan sesuaikan mereka. Saya juga pernah mendengar perkara yang baik tentang pakej Cobra yang mungkin sangat mudah digunakan di sini, lain kali saya akan mencubanya.

func (todos *Todos) toggle(index int) error {
    if err := todos.validateIndex(index); err != nil {
        return err
    }

    t := *todos
    todo := &t[index]

    if !todo.Completed {
        completedTime := time.Now()
        todo.CompletedAt = &completedTime
    } else {
        todo.CompletedAt = nil
    }

    todo.Completed = !todo.Completed
    return nil
}

Dari situ, anda boleh menjadi kreatif tentang cara anda ingin melaksanakan bendera ini, dalam kes saya, saya membuat pernyataan kes mudah.

Itu sahaja?

Ya! Dengan melengkapkan aplikasi Go cli to-do yang mudah ini yang boleh dilakukan dalam tempoh masa yang agak singkat, jerit utama kepada Pengekodan dengan Patrik dan The Builder kedua-duanya mempunyai kandungan yang menakjubkan di luar sana untuk membantu projek seperti ini dan menjadikannya menyeronokkan!

Terima kasih kerana membaca dan saya berharap projek mini ini memberi inspirasi kepada orang lain untuk sama ada bermula dengan Go atau teruskan berlatih dengannya. Saya ada beberapa lagi untuk dilakukan dan dikongsi, jumpa lagi di lain kali!

Simple Go CLI-Todo App

Atas ialah kandungan terperinci Apl Simple Go CLI-Everything. 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
Impak Golang: Kelajuan, Kecekapan, dan KesederhanaanImpak Golang: Kelajuan, Kecekapan, dan KesederhanaanApr 14, 2025 am 12:11 AM

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

C dan Golang: Apabila prestasi sangat pentingC dan Golang: Apabila prestasi sangat pentingApr 13, 2025 am 12:11 AM

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Golang dalam Tindakan: Contoh dan aplikasi dunia nyataGolang dalam Tindakan: Contoh dan aplikasi dunia nyataApr 12, 2025 am 12:11 AM

Golang cemerlang dalam aplikasi praktikal dan terkenal dengan kesederhanaan, kecekapan dan kesesuaiannya. 1) Pengaturcaraan serentak dilaksanakan melalui goroutine dan saluran, 2) Kod fleksibel ditulis menggunakan antara muka dan polimorfisme, 3) memudahkan pengaturcaraan rangkaian dengan pakej bersih/HTTP, 4) Membina crawler serentak yang cekap, 5) Debugging dan mengoptimumkan melalui alat dan amalan terbaik.

Golang: bahasa pengaturcaraan Go dijelaskanGolang: bahasa pengaturcaraan Go dijelaskanApr 10, 2025 am 11:18 AM

Ciri -ciri teras GO termasuk pengumpulan sampah, penyambungan statik dan sokongan konvensional. 1. Model keseragaman bahasa GO menyedari pengaturcaraan serentak yang cekap melalui goroutine dan saluran. 2. Antara muka dan polimorfisme dilaksanakan melalui kaedah antara muka, supaya jenis yang berbeza dapat diproses secara bersatu. 3. Penggunaan asas menunjukkan kecekapan definisi fungsi dan panggilan. 4. Dalam penggunaan lanjutan, kepingan memberikan fungsi saiz semula dinamik yang kuat. 5. Kesilapan umum seperti keadaan kaum dapat dikesan dan diselesaikan melalui perlumbaan getest. 6. Pengoptimuman prestasi menggunakan objek melalui sync.pool untuk mengurangkan tekanan pengumpulan sampah.

Tujuan Golang: Membina sistem yang cekap dan berskalaTujuan Golang: Membina sistem yang cekap dan berskalaApr 09, 2025 pm 05:17 PM

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Kenapa keputusan pesanan oleh pernyataan dalam penyortiran SQL kadang -kadang kelihatan rawak?Kenapa keputusan pesanan oleh pernyataan dalam penyortiran SQL kadang -kadang kelihatan rawak?Apr 02, 2025 pm 05:24 PM

Keliru mengenai penyortiran hasil pertanyaan SQL. Dalam proses pembelajaran SQL, anda sering menghadapi beberapa masalah yang mengelirukan. Baru-baru ini, penulis membaca "Asas Mick-SQL" ...

Adakah Teknologi Stack Convergence hanya proses pemilihan stack teknologi?Adakah Teknologi Stack Convergence hanya proses pemilihan stack teknologi?Apr 02, 2025 pm 05:21 PM

Hubungan antara konvergensi stack teknologi dan pemilihan teknologi dalam pembangunan perisian, pemilihan dan pengurusan susunan teknologi adalah isu yang sangat kritikal. Baru -baru ini, beberapa pembaca telah mencadangkan ...

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft