Rumah > pembangunan bahagian belakang > Golang > Apl Simple Go CLI-Everything

Apl Simple Go CLI-Everything

Patricia Arquette
Lepaskan: 2024-11-30 20:14:20
asal
642 orang telah melayarinya

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
}
Salin selepas log masuk
Salin selepas log masuk

dengan sekeping untuk menampung tugas kami

type Todos []Todo
Salin selepas log masuk
Salin selepas log masuk

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)
}
Salin selepas log masuk
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk

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()
}
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk
  • 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
Salin selepas log masuk
Salin selepas log masuk

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

    *todos = append(*todos, todo)
}
Salin selepas log masuk
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk

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
}
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan