Go 읽기 및 쓰기 데이터

7044 단어

사용자 입력


fmt.Scanxx

  • fmt.Scanln
  • var s1,s2 string
    fmt.Scanln(&s1,&s2)
    

    이상은 비어 있지 않은 문자가 발생할 때까지 한 줄을 읽고 공백으로 구분합니다.그래서 코드가 이렇다면:
    var s1,s2 string
    fmt.Scanln(&s1)
    fmt.Scanln(&s2)
    fmt.Printnln(s1,s2)
    
    abcd efg를 입력하면 출력은 abcd fg이 됩니다. 두 번째 단어의 첫 번째 문자는 줄 바꾸기로 처리되기 때문입니다.그러나 abcd
    를 입력하면 두 번째 문자열은 읽을 수 없습니다. 줄별로 읽는 것이기 때문에 줄을 바꾸면 바로 읽을 수 없습니다.
  • fmt.Scanf()
  • fmt.Scanf C 언어의 scanf 사용법과 같다: fmt.Scanf("%s%s",&s1,&s2)
  • fmt.Scan()
  • fmt.Scan() 들어오는 매개 변수를 읽을 때까지 줄 바꾸기를 처리하지 않습니다.fmt.Scan(&s1,&2)와 같이 읽은 두 문자열 사이에 줄 바꿈이 있을 수 있습니다.

    fmt.Sscanxxx


    S로 시작하는 scan 함수는 문자열을 처리하고 사용자 입력을 처리하지 않습니다.예:
    input := "abcd efg"
    fmt.Sscan(input,&s1,&s2)
    fmt.Sscanln(input,&s1,&s2)
    fmt.Sscanf(input,"%s%s",&s1,&s2)
    

    bufio


    bufio를 사용하여 데이터를 읽을 수도 있습니다.
  • bufio.NewScanner
  •     inputScanner := bufio.NewScanner(os.Stdin)
        inputScanner.Scan()
        fmt.Println(inputScanner.Text())
    

    여기서 inputScanner.Scan () 은 읽은 데이터를 내부 버퍼에 저장하고 inputScanner를 사용합니다.Text () 는 그것을 읽을 수 있습니다. Scan은 줄 바꾸기를 읽지 않을 뿐만 아니라,
    와 같은 문자는 뜻을 바꾸지 않을 것입니다.
  • bufio.NewReader
  •     inputReader := bufio.NewReader(os.Stdin)
        input,err := inputReader.ReadString(',')
    

    그러나 이 함수는 inputScanner와 다르다. 이것은 읽은 데이터와 error를 직접 되돌려주는 것이다. 그 중에서 매개 변수는 대응하는 문자를 읽으면 멈추고, 되돌아오는 데이터는 이 문자를 포함한다.따라서 입력이 abcd,라면 input의 값은 abcd,ReadString뿐만 아니라 ReadBytes도 읽을 수 있지만 ReadBytes는byte 형식의 슬라이드를 되돌려준다.byte 유형의 슬라이드와string은 서로 돌릴 수 있기 때문에 기본적으로 같다.

    파일 읽기와 쓰기


    os.Open 및 bufio

    os.Open("input.txt")는 파일을 열 때 사용하는데 파일 형식은 일반적으로 os.*File 형식이고 os.Stdinos.*File 형식이기 때문에 bufio.NewScanner()bufio.NewReader에게도 파일을 전송할 수 있다.그래서 파일 읽기의 가장 간단한 사고방식은 os.Openbufio 패키지를 통해 실현하는 것이다.
        file,err := os.Open("test.go")
        if err != nil{
            fmt.Println("      ")
        }
        inputScan := bufio.NewScanner(file)
        for inputScan.Scan() {
            fmt.Println(inputScan.Text())
        }
    

    물론 bufio.NewReader(file)를 통해 실현할 수 있지만 이러한 방법이 실현되는 필요 판단err은 파일의 끝을 읽으면 io로 되돌아갈 수 있음을 주의하십시오.EOF, 따라서 전체 파일을 읽는 방법은 다음과 같습니다.
        file,err := os.Open("test.go")
        if err != nil{
            fmt.Println("      ")
        }
        inputReader := bufio.NewReader(file)
        for {
            line,err := inputReader.ReadString('
    ') fmt.Printf("%s",line) if err == io.EOF{ return } }

    io로 돌아가는 것을 주의하십시오.EOF 때 라인 변수에도 값이 있습니다.

    ioutil


    ioutil을 이용하다.ReadXxx 함수는 다음과 같은 파일 컨텐트나 사용자 입력을 읽을 수 있습니다.
        file,err := os.Open("test.go")
        defer file.Close()
        if err != nil{
            fmt.Println("    ")
        }
        bytes,err := ioutil.ReadAll(file)
        if err != nil{
            fmt.Println("     ")
        }
        fmt.Println(string(bytes))
    

    ioutil.ReadAll에서 들어오는 것은 io입니다.Reader, 그래서 os.Open, 마침 io로 돌아왔습니다.Reader, 그래서 가능합니다.또한 ioutil.ReadFile 방법을 사용할 수 있는데 이 방법은 사실 상술한 방법에 대한 봉인이다.
        bytes,err := ioutil.ReadFile("test.go")
        if err != nil{
            fmt.Println("    ")
        }
        fmt.Println(string(bytes))
    

    버퍼 읽기

        f,err := os.Open("test.go")
        if err != nil{
            fmt.Println("  ")
        }
        fefer f.Close()
        inputReader := bufio.NewReader(f)
        buf := make([]byte,1024)
        n,err := inputReader.Read(buf)
        for n!=0 && err ==nil{
            fmt.Println(string(buf))
            n,err = inputReader.Read(buf)
        }
    

    여기서 inpuReader.Read 메서드는 읽은 바이트의 개수를 나타내는 n의 버퍼 매개 변수를 반환합니다.반드시 융통성이 있어야 한다. 이렇게 읽는 방식은 파일뿐만 아니라 화면 입력에도 적용된다.

    fmt.Fscanxxx


    같은 fmt에는 F로 시작하는 읽기 함수들이 포함되어 있는데 fmt.Sscanln``fmt.Sscan``fmt.Sscanf와 유사하지만 첫 번째 파라미터는 입력 문자열에서 전송 파일로 바뀌었다.

    파일 쓰기


    가장 간단한 것은 fmt를 통과하는 것이다.Fprintf에서 문자열 쓰기: fmt.Fprintf(file,"some data
    ")
    또는 fmt.Fprintln(file,"some data")
        f,_ := os.Open("test.go")
        _,err := fmt.Fprintln(f,"someData")
        fmt.Println(err)
    

    이 방법은 권한이 없으면 쓰기에 성공하지 못할 수 있음을 주의해야 한다. 다른 방법은 os.OpenFile를 통해 파일을 열고 열 수 있는 방식을 부여하는 것이다. 예를 들어 다음과 같다.
        outputFile,err := os.OpenFile("test.go",os.O_WRONLY|os.O_CREATE,0666)
        if err != nil{
            fmt.Println("  ")
        }
        defer outputFile.Close()
        outputFile.WriteString("   ,       ")
    

    두 번째 매개변수는 읽기 전용 모드, 추가 모드 등이 있는 열린 모드입니다. 일반적으로 사용하는 모드는 다음과 같습니다.
    const (
        O_RDONLY int = syscall.O_RDONLY // open the file read-only.
        O_WRONLY int = syscall.O_WRONLY // open the file write-only.
        O_RDWR   int = syscall.O_RDWR   // open the file read-write.
        O_APPEND int = syscall.O_APPEND // append data to the file when writing.
        O_CREATE int = syscall.O_CREAT  // create a new file if none exists.
        O_EXCL   int = syscall.O_EXCL   // used with O_CREATE, file must not exist
        O_SYNC   int = syscall.O_SYNC   // open for synchronous I/O.
        O_TRUNC  int = syscall.O_TRUNC  // if possible, truncate file when opened.
    )
    

    파일을 쓸 때 세 번째 인자는 0666이어야 하며 읽을 때 무시할 수 있습니다.너무 많은 내용을 쓰면 버퍼링된 쓰기 도구를 bufio에서 만들 수 있습니다.
    bufio.NewWriter(outputFile)
    

    파일 복사

    io.Copy(target,source)하지만 소스 파일은 os를 통과할 수 있음을 주의하세요.Open은 읽고 target 파일은 os를 사용해야 합니다.OpenFile을 읽고 os.O_WRONLY 플래그 또는 기타 쓰기 가능 플래그

    명령줄 읽기


    명령줄 읽기는 os.Args를 통해 명령의 파라미터를 얻을 수 있고 flag 패키지를 통해 파라미터를 설정할 수 있다.예를 들어 입력: ./goTest hahaha lalal그럼os.Args에 저장된 것은 [./goTest,hahaha,lalal]이며os를 통과할 수 있습니다.Args[1]는 이 방법으로 체크 아웃합니다.
    그런데 만약에 내가 ./goTest -name Mike 이런 방식으로 데이터를 찾으려면 어떡하지? 방법은 flag 패키지를 통해서야.예를 들면 다음과 같습니다.
        name := flag.String("name","","      ~")
        flag.Parse()
        fmt.Println(*name)
    

    name은 flag를 통해 포인터 형식입니다.Parse () 방법은 명령줄의 매개 변수를 해석할 수 있으며 *name를 통해 입력을 꺼낼 수 있다. flag.String의 첫 번째 매개 변수는 명령줄의 매개 변수 이름을 나타낸다. 예를 들어 입력./goTest -name "hahah"은 첫 번째 매개 변수에 대응하고 두 번째 매개 변수는name의 기본값이다. 입력하지 않으면name의 값은 이 기본값이고 세 번째 매개 변수는 설명이다. 보통-name에만 나타난다.
    물론 help뿐만 아니라flag.String 등의 방법도 있다.flag.Boolfalg.StringVar와 마찬가지로 flag.String만 되돌아오는 값이 없고name 지침을 이 방법에 전달했다. flag.StringVar

    좋은 웹페이지 즐겨찾기