Saya mempunyai tiga projek GO dalam fikiran, tetapi saya takut untuk menyelesaikannya. Saya mahu melakukannya dan merasakan bahawa saya sedang belajar dalam proses, bukannya hanya menyalin dan menampal kod daripada stackoverflow dan chatgpt.
Saya ingin membedah kod, konsep dan idea projek untuk dijelaskan dalam artikel, seperti ini. Saya percaya dengan cara ini saya akan dapat menyerap pengetahuan di sebalik penghasilan kod projek.
Daripada tiga projek, tiada satu pun yang terbukti sangat mudah. Jadi saya terfikir untuk membina projek keempat, lebih ringkas, lebih pendek dan tempat saya boleh belajar sesuatu.
Sesuatu lebih baik daripada tiada. Dan tiada yang lebih baik daripada apa-apa yang belum selesai.
Tetapi bagaimanapun, mari lakukannya!
Ah, nama itu benar-benar lucu, tetapi saya memikirkan konsep f-string, di mana anda memperkenalkan rentetan ke dalam beberapa kod.
Bagi kucing... baiklah, awak dapat saya. Orang suka kucing. Ditambah dengan ini, saya fikir Nietzsche akan menjadi kucing, bukannya anjing, rama-rama, gajah, dinosaur atau sloth. Jadi itu sahaja. Ia adalah kucing, kerana YA.
Kami bermula dengan fakta bahawa kami sudah mempunyai fail txt dengan petikan Nitzsche. Program ini perlu memilih salah satu daripada ini secara rawak dan menyediakannya kepada pengguna. Selain itu, anda perlu mencetak kucing dalam ASCII dan membentuk gelembung pertuturan di sekeliling petikan yang dipaparkan.
Ringkasnya:
Fail dengan petikan: Fail .txt dengan petikan daripada Nietzsche, di mana setiap petikan berada pada baris yang berasingan.
Lukisan kucing dalam ASCII: Mari tentukan lukisan kucing yang akan dicetak dalam terminal.
Saya suka yang ini. Dia mempunyai mata yang memukau.
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
Muat dan pilih petikan rawak: Program akan membaca petikan daripada fail .txt dan memilih satu secara rawak.
Cetak petikan dengan gelembung pertuturan: Petikan akan dipaparkan di dalam gelembung pertuturan di atas kucing.
Pertama sekali:
Buat direktori untuk projek dan navigasi ke sana:
mkdir fcat cd fcat
Buat fail main.go:
touch main.go
Mulakan modul go:
go mod init main.go
Direktori anda sepatutnya kelihatan seperti ini:
fcat . ├── go.mod ├── main.go └── quotes.txt
Sekarang buka main.go dalam IDE pilihan anda.
NVIM jika ia gembar-gembur XD
Fungsi ini membuka fail petikan (nietzsche.txt), membaca setiap baris dan menyimpan semua petikan dalam senarai.
Fungsi tidak akan menerima hujah, ia hanya akan mengembalikan senarai/kepingan rentetan dan ralat: rentetan dan ralat:
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
Dalam fungsi kami akan memulakan hirisan/senarai untuk menerima semua petikan:
mkdir fcat cd fcat
Sekarang, mari buka fail txt:
touch main.go
Sekarang, kami perlu membuat "pengimbas" untuk membaca fail petikan kami quotes.txt.
Ia juga perlu membaca setiap baris fail.
go mod init main.go
Sekarang, kami akan menyemak ralat semasa membaca fail txt petikan dan mengembalikan senarai kami dengan petikan yang telah ditambahkan padanya.
fcat . ├── go.mod ├── main.go └── quotes.txt
Sekarang kita perlu mencipta fungsi utama untuk mengembalikan petikan dan menyemak sama ada fungsi loadCitations betul:
package main import ( "fmt" "os" "bufio" ) func carregarCitations()([]string, error) { }
Kod sepatutnya kelihatan seperti ini:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string }
Sekarang mari jalankan kod dalam terminal
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string // Abrir o arquivo txt com as citações arquivo, err := os.Open('quotes.txt') if err != nil { return nil, err // Retorna erro se falhar em abrir arquivo } defer arquivo.Close() }
Anda sepatutnya melihat semua petikan dalam fail quotes.txt anda dalam terminal anda.
Fungsi ini menggunakan perpustakaan matematik/rand untuk memilih petikan rawak daripada senarai.
Di dalam kurungan fungsi (), anda mentakrifkan parameter yang diterima oleh fungsi sebagai input. Dalam contoh:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string // Abrir o arquivo txt com as citações arquivo, err := os.Open('quotes.txt') if err != nil { return nil, err // Retorna erro se falhar em abrir arquivo } defer arquivo.Close() // Criar scanner para leitura do arquivo txt scanner := bufio.NewScanner(arquivo) // Ler cada linha de cada arquivo for scanner.Scan() { linha := scanner.Text() // Obter o texto da linha citas = append(citas, linha) // Realiza a adição das linhas à lista/slice citas } }
Apabila anda memanggil fungsi tersebut, anda mesti lulus senarai petikan (cth. dimuatkan daripada fail quotes.txt), dan senarai ini akan digunakan dalam fungsi tersebut.
Selepas kurungan input, sebelum badan fungsi {}, anda tentukan jenis nilai yang akan dikembalikan oleh fungsi itu.
package main import ( "fmt" "os" "bufio" ) func carregarCitations([]string, error) { // Abrir uma lista para receber as citações var citas []string // Abrir o arquivo txt com as citações arquivo, err := os.Open('quotes.txt') if err != nil { return nil, err // Retorna erro se falhar em abrir arquivo } defer arquivo.Close() // Criar scanner para leitura do arquivo txt scanner := bufio.NewScanner(arquivo) // Ler cada linha de cada arquivo for scanner.Scan() { linha := scanner.Text() // Obter o texto da linha citas = append(citas, linha) // Realiza a adição das linhas à lista citas } // Verifica se houve erro na leitura do arq txt if err := scanner.Err(); err != nil { return nil, err } // Retornar nossa lista com citações return citas, nil // Retorna lista de citações }
Dalam kes ini, fungsi akan mengembalikan petikan rawak, iaitu rentetan tunggal.
Walau bagaimanapun, kita perlu menjana nilai rawak, tetapi BENAR-BENAR rawak. Jika kita hanya menggunakan rand.Seed(), benih lalai akan sentiasa sama. Itulah sebabnya kita perlu lulus dua fungsi lain sebagai parameter:
masa.Sekarang(), yang mengembalikan masa semasa
UnixNano(), yang akan menukar masa ini kepada integer, mewakili bilangan nanosaat sejak 1 Januari 1970. Kebutiran tinggi yang merupakan lompatan kucing XD
Dan kemudian kita memerlukan fungsi untuk mengembalikan indeks rawak petikan mengikut saiz senarai petikan (panjang)
func main() { citations, err := carregarCitations() if err != nil { fmt.Println("Erro ao carregar citações", err) return } for _, citation := range citations { fmt.Println(citation) } }
len(citations) mengembalikan bilangan petikan dalam kepingan.
rand.Intn(n) menjana nombor rawak antara 0 dan n-1.
rand.Intn(len(citations)) memilih indeks rawak yang sah untuk mengakses petikan daripada senarai.
Dan sekarang mari tukar fungsi utama untuk mencetak petikan rawak:
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
Kod kami sepatutnya kelihatan seperti ini:
mkdir fcat cd fcat
Sekarang jalankan main.go di terminal anda untuk menyemak sama ada kami boleh mendapatkan sebut harga rawak:
touch main.go
Fungsi ini memaparkan lukisan kucing dalam ASCII dan mencetak petikan di dalam gelembung pertuturan.
go mod init main.go
Dalam fungsi utama(), program memuatkan petikan, memilih satu rawak dan mencetak kucing dengan petikan dalam belon.
fcat . ├── go.mod ├── main.go └── quotes.txt
Kod akhir kami sepatutnya kelihatan seperti ini:
package main import ( "fmt" "os" "bufio" ) func carregarCitations()([]string, error) { }
Sekarang kita hanya perlu menyusun atur cara kita dan menjalankannya.
Kompilasikan fail main.go anda sebagai fcat:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string }
Dan akhirnya, laksanakan:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string // Abrir o arquivo txt com as citações arquivo, err := os.Open('quotes.txt') if err != nil { return nil, err // Retorna erro se falhar em abrir arquivo } defer arquivo.Close() }
Inilah hasilnya:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string // Abrir o arquivo txt com as citações arquivo, err := os.Open('quotes.txt') if err != nil { return nil, err // Retorna erro se falhar em abrir arquivo } defer arquivo.Close() // Criar scanner para leitura do arquivo txt scanner := bufio.NewScanner(arquivo) // Ler cada linha de cada arquivo for scanner.Scan() { linha := scanner.Text() // Obter o texto da linha citas = append(citas, linha) // Realiza a adição das linhas à lista/slice citas } }
Saya mendapati ia menarik bagaimana sesuatu yang begitu mudah boleh menjadi sangat rumit untuk dilaksanakan.
Tetapi apa yang menarik perhatian saya ialah baris pembukaan program: "Dia yang mempunyai sebab untuk hidup boleh menanggung hampir semua cara"
Semoga ayat di atas memberi semangat untuk terus belajar.
ion,
Satu hari lagi di bumi
Atas ialah kandungan terperinci Nietzsche menjelma semula dalam kucing, CLI \'alat\' yang dibuat dengan GO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!