GO プロジェクトが 3 つ考えられていますが、完了するのが怖いです。 stackoverflow や chatgpt からコードをコピーして貼り付けるだけではなく、その過程で学んでいるという実感を持ちたいと思っています。
このように、プロジェクトのコード、コンセプト、アイデアを分析して記事で説明したいと思います。そうすることで、プロジェクトコード作成の裏にある知識を吸収できると信じています。
3 つのプロジェクトのうち、どれもそれほど単純ではありません。そこで、よりシンプルで短く、何かを学べる 4 番目のプロジェクトを構築することを考えました。
何もしないよりは何かあった方が良いです。そして、未完成のものほど良いものはありません。
でも、とにかくやってみましょう!
ああ、その名前は本当に面白いですが、コードに文字列を導入する f 文字列の概念について考えてみました。
猫については...まあ、わかりました。人々は猫が好きです。これに加えて、私はニーチェは犬、蝶、象、恐竜、ナマケモノではなく猫になるだろうと思っていました。それで終わりです。それは猫です、なぜならそうです。
ニッチェの引用を含む txt ファイルが既にあるという事実から始めます。プログラムはこれらのうち 1 つをランダムに選択し、ユーザーが使用できるようにする必要があります。さらに、猫を ASCII で印刷し、表示された引用符の周りに吹き出しを形成する必要があります。
要するに:
引用符を含むファイル: ニーチェの引用を含む .txt ファイル。各引用は別の行にあります。
ASCII での猫の描画: ターミナルに印刷される猫の描画を定義しましょう。
これが気に入りました。彼は魅惑的な目をしています。
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
ランダムな引用をロードして選択します: プログラムは .txt ファイルから引用を読み取り、ランダムに引用を選択します。
吹き出し付き引用文を印刷: 引用文は猫の上の吹き出し内に表示されます。
まず最初に:
プロジェクトのディレクトリを作成し、そこに移動します:
mkdir fcat cd fcat
main.go ファイルを作成します:
touch main.go
go モジュールを初期化します:
go mod init main.go
ディレクトリは次のようになります:
fcat . ├── go.mod ├── main.go └── quotes.txt
次に、お好みの IDE で main.go を開きます。
誇大広告なら NVIM XD
この関数は、引用ファイル (nietzsche.txt) を開き、各行を読み取り、すべての引用をリストに保存します。
関数は引数を受け取りません。文字列のリスト/スライスとエラー: 文字列とエラー:
を返すだけです。
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
関数内で、すべての引用符を受け取るためにスライス/リストを初期化します。
mkdir fcat cd fcat
それでは、txt ファイルを開いてみましょう:
touch main.go
次に、引用ファイル quotes.txt を読み取るための「スキャナー」を作成する必要があります。
ファイルの各行を読み取る必要もあります。
go mod init main.go
ここで、引用の txt ファイルを読み取るときにエラーをチェックし、追加された引用を含むリストを返します。
fcat . ├── go.mod ├── main.go └── quotes.txt
次に、引用を返し、loadCitations 関数が正しいかどうかを確認する main 関数を作成する必要があります。
package main import ( "fmt" "os" "bufio" ) func carregarCitations()([]string, error) { }
コードは次のようになります:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string }
ターミナルでコードを実行しましょう
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() }
ターミナルの quotes.txt ファイル内のすべての引用符が表示されるはずです。
この関数は math/rand ライブラリを使用して、リストからランダムな引用符を選択します。
関数のかっこ () 内で、関数が入力として受け取るパラメーターを定義します。例では:
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 } }
関数を呼び出すときは、引用符のリスト (例: quotes.txt ファイルからロード) を渡す必要があります。このリストは関数内で使用されます。
入力かっこの後、関数本体 {} の直前に、関数が返す値のタイプを指定します。
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 }
この場合、関数は単一の文字列であるランダムな引用符を返します。
ただし、ランダムな値を生成する必要がありますが、実際はランダムです。 rand.Seed() のみを使用する場合、デフォルトのシードは常に同じになります。そのため、他の 2 つの関数をパラメータとして渡す必要があります:
time.Now()、現在時刻を返します
UnixNano()。今回の時間を 1970 年 1 月 1 日からのナノ秒数を表す整数に変換します。猫の跳躍である高粒度 XD
次に、引用リストのサイズ (長さ) に応じて引用のランダムなインデックスを返す関数が必要です
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(引用) は、スライス内の引用の数を返します。
rand.Intn(n) は、0 から n-1 までの乱数を生成します。
rand.Intn(len(quotes)) は、リストから引用にアクセスするための有効なランダム インデックスを選択します。
そして、ランダムな引用を出力するように main 関数を変更しましょう:
,_ _ |\_,-~/ / _ _ | ,--. ( @ @ ) / ,-' \ _T_/-._( ( / `. \ | _ \ | \ \ , / | || |-_\__ / ((_/`(____,-'
コードは次のようになります:
mkdir fcat cd fcat
次にターミナルで main.go を実行して、ランダムな引用符を取得できるかどうかを確認します。
touch main.go
この関数は、猫の絵を ASCII で表示し、吹き出し内に引用文を印刷します。
go mod init main.go
main() 関数で、プログラムは引用符をロードし、ランダムに引用符を選択し、バルーン内に引用符を含む猫を出力します。
fcat . ├── go.mod ├── main.go └── quotes.txt
最終的なコードは次のようになります:
package main import ( "fmt" "os" "bufio" ) func carregarCitations()([]string, error) { }
あとはプログラムをコンパイルして実行するだけです。
main.go ファイルを fcat としてコンパイルします:
package main import ( "fmt" "os" "bufio" ) func carregarCitations() ([]string, error) { // Abrir uma lista para receber as citações var citas []string }
そして最後に、以下を実行します。
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() }
結果は次のとおりです:
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 } }
非常に単純なものが、実行すると非常に複雑になるのは興味深いと思いました。
しかし、私が印象に残ったのは、番組の冒頭のセリフです。「生きる理由がある人は、ほとんどどんな状況にも耐えることができます」
上の文が学習を続けるきっかけとなりますように。
イオン、
地球上の別の日
以上がニーチェが猫に転生、GO で作られた「ツール」 CLIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。