Maison  >  Article  >  développement back-end  >  Golang implémente la queue

Golang implémente la queue

WBOY
WBOYoriginal
2023-05-16 16:50:08803parcourir

Sur les systèmes Linux, la commande tail est utilisée pour afficher les dernières lignes d'un ou plusieurs fichiers. En développement, nous devons souvent utiliser la commande tail pour afficher le dernier état du fichier journal en temps réel. Et si nous voulons implémenter la fonctionnalité de la commande tail dans le langage Go ?

En langage Go, nous pouvons utiliser le package os et le package bufio pour implémenter la commande tail. Vous trouverez ci-dessous un exemple d'utilisation du langage Go pour implémenter la commande tail. Le code est le suivant :

package main

import (
    "bufio"
    "flag"
    "fmt"
    "os"
    "time"
)

func main() {
    var filename string
    var linesNum int
    flag.StringVar(&filename, "file", "", "file name")
    flag.IntVar(&linesNum, "n", 10, "last n lines")
    flag.Parse()

    if filename == "" {
        flag.Usage()
        os.Exit(1)
    }

    f, err := os.Open(filename)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer f.Close()

    fi, err := f.Stat()
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    var offset int64
    if fi.Size() > int64(1024*linesNum) {
        offset = fi.Size() - int64(1024*linesNum)
    }

    _, err = f.Seek(offset, 0)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    reader := bufio.NewReader(f)
    for {
        line, _, err := reader.ReadLine()
        if err != nil {
            if err.Error() == "EOF" {
                time.Sleep(time.Second)
                continue
            } else {
                fmt.Println(err)
                os.Exit(1)
            }
        }
        fmt.Println(string(line))
    }
}

Dans le code ci-dessus, nous utilisons le package flag pour traiter les paramètres de ligne de commande, le package os pour ouvrir les fichiers, le package bufio pour lire les fichiers et le package time pour implémenter des retards et d'autres opérations.

Dans le programme, nous recevons deux paramètres de ligne de commande : le nom du fichier et le nombre de lignes à afficher. Si le nom du fichier est vide, imprimez les instructions et quittez le programme.

Nous utilisons la fonction os.Open pour ouvrir le fichier et la fonction f.Stat pour obtenir des informations sur le fichier. Si la taille du fichier est supérieure au nombre de lignes à afficher, la position du pointeur de fichier est définie sur une position n lignes avant la fin du fichier.

Nous utilisons la fonction bufio.NewReader pour créer un lecteur tamponné et utilisons la fonction ReadLine dans une boucle for pour lire et afficher chaque ligne du fichier. Si la fin du fichier est atteinte, utilisez la fonction time.Sleep pour attendre une seconde et continuer la lecture du fichier.

Chaque fois que nous lisons jusqu'à la fin du fichier, nous utilisons la fonction time.Sleep pour attendre une seconde. Cela permet d'empêcher le programme de parcourir le fichier en boucle et de consommer trop de ressources CPU. En mise en œuvre, nous pouvons ajuster le temps d’attente en fonction des besoins réels.

Dans le programme, nous utilisons également le mot-clé defer pour fermer le fichier avant la fermeture du programme. Il s’agit d’une bonne pratique pour garantir que les ressources sont libérées en temps opportun.

Ce qui précède est un exemple simple d'utilisation du langage Go pour implémenter la commande tail. Grâce à cet exemple, nous pouvons apprendre à utiliser le langage Go pour lire des fichiers et implémenter des fonctions similaires à la commande tail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:utilisation de Golang GotoArticle suivant:utilisation de Golang Goto