Go 언어 프로그래밍 실례(8)

4956 단어
이 섹션은 주로 파일 읽기, 파일 쓰기, 선 필터, 명령행 매개 변수, 명령행 표식
다음 코드는github에 다음 창고에 저장됩니다:github
Go 파일 읽기
프로그램의 기본 기능 중 하나는 바로 파일의 조작이다. 여기서 Go가 파일을 읽을 때 잘못된 판단을 해야 한다는 사고방식을 제공한다.
package main

import (
    "io/ioutil"
    "fmt"
    "os"
    "bufio"
)

//                 
//             

func check(e error){
    if e != nil {
        panic(e)
    }
}


func main(){
    //            
    dat , err := ioutil.ReadFile("test.log")
    check(err)
    fmt.Print(string(dat))

    //         ,            。
    f,err := os.Open("test.log")
    check(err)

    //     5      
    b1 := make([]byte,5)
    n1,err:=f.Read(b1)
    check(err)
    fmt.Printf("%d bytes: %s
",n1,string(b1)) // o2 , err := f.Seek(5,0) check(err) b2 := make([]byte,2) n2,err := f.Read(b2) check(err) fmt.Printf("%d bytes @ %d: %s
",n2,o2,string(b2)) // , Seek(0,0) _,err = f.Seek(0,0) check(err) //bufio , , // 。 r4 := bufio.NewReader(f) b4,err := r4.Peek(5) check(err) fmt.Printf("5 bytes: %s
",string(b4)) // f.Close() }

Go 파일 쓰기 인스턴스
Go에서 파일의 읽기 및 쓰기 모드는 비슷합니다.파일을 쓰는 데도 대부분의 호출 오류를 검사해야 합니다.
package main

import (
    "io/ioutil"
    "os"
    "fmt"
    "bufio"
)

func check(e error){
    if e != nil {
        panic(e)
    }
}

func main(){
    //           
    d1 := []byte("hello 
go
") err := ioutil.WriteFile("write_test.txt",d1,0644) check(err) // ( ) f ,err := os.Create("write_test2.txt") check(err) // defer f.Close() // d2 := []byte{115,111,109,101,10} n2,err := f.Write(d2) check(err) fmt.Printf("Write %d bytes
",n2) // n3 , err := f.WriteString("writes
") fmt.Printf("write %d bytes
",n3) // , f.Sync() //bufio w := bufio.NewWriter(f) n4,err:=w.WriteString("buffered
") fmt.Printf("write %d bytes
",n4) w.Flush() }

Go 행 필터 인스턴스
선 필터는 stdin의 입력을 읽고 처리한 다음 파생 결과를 stdout에 출력하는 흔한 프로그램이다.grep,sed는 흔히 볼 수 있는 선 필터입니다.
package main

import (
    "bufio"
    "os"
    "strings"
    "fmt"
)

func main(){
    //            os.Stdin                       ,
    //            。
    scanner := bufio.NewScanner(os.Stdin)

    for scanner.Scan(){
        // `Text`       ,           
        ucl := strings.ToUpper(scanner.Text())
        //      
        fmt.Println(ucl)
    }

    //         。        ,    scan      。
    if err := scanner.Err(); err != nil {
        fmt.Println(os.Stderr,"error:",err)
        os.Exit(1)
    }
}


Go 명령행 매개변수 인스턴스
명령행 매개 변수는 매개 변수화 프로그램이 실행하는 데 자주 사용하는 방법이다.예: go run hello.go는 go와 hello를go는 매개 변수로 go 프로그램에 적용됩니다.
os.Args는 원래 명령줄 매개변수에 액세스할 수 있습니다.이 슬라이드의 첫 번째 값은 프로그램의 경로,os입니다.Args[1:] 프로그램의 매개 변수를 저장합니다.단일 ARg 값을 정상적으로 인덱스할 수 있습니다.
참고: 프로그램을 실행하려면 cmd에서 다음을 수행하는 것이 좋습니다.
go run cmd_args.go 1 2 3 4 5
package main

import (
    "os"
    "fmt"
)

func main(){
    //os.Args              
    argsWithProg := os.Args
    argsWithoutProg := os.Args[1:]

    //        
    arg := os.Args[3]

    fmt.Println(argsWithoutProg)
    fmt.Println(argsWithProg)
    fmt.Println(arg)
}


Go 명령행 식별 인스턴스
명령행 표지는 명령행 프로그램 옵션을 제정하는 데 자주 사용하는 방법이다.예를 들어 gobuild -ldflags abc ac.go에서 -ldflags는 명령행 표식이다.Go는 기본 명령행 ID 해석을 지원하는 ID 플래그 패키지를 제공합니다.다음 예는 다음과 같습니다.
import (
    "flag"
    "fmt"
)

func main(){
    //            ,       。             
    //foo        word         。   flag.String          
    wordPtr := flag.String("word","foo","a string")

    //   numb   fork  ,   word       
    numbPtr := flag.Int("numb",42,"an int")
    boolPtr := flag.Bool("fork",false,"a bool")

    //                           。
    //                   
    var svar string
    flag.StringVar(&svar,"svar","bar","a string var")

    //            ,      
    flag.Parse()


    //    
    fmt.Println("word:",*wordPtr)
    fmt.Println("numb:",*numbPtr)
    fmt.Println("fork",*boolPtr)
    fmt.Println("svar:",svar)
    fmt.Println("tail",flag.Args())
}

작업 출력은 다음과 같습니다.
C:\Go\MyGo\src\lesson8_file>go build cmd_flags.go

C:\Go\MyGo\src\lesson8_file>cmd_flags.exe -word=ckl -numb=05202235 -fork -svar=flag
word: ckl
numb: 1377437
fork true
svar: flag
tail []


추가 논의 대상: 295023494(내장형)

좋은 웹페이지 즐겨찾기