zoukankan      html  css  js  c++  java
  • golang begin

    1. install go

    2. configure sublime
    http://blog.csdn.net/cyxcw1/article/details/10329481

    3.io package

    1) io.Reader

     1 // io.Reader 接口示例
     2 package main
     3 
     4 import (
     5     "fmt"
     6     "io"
     7     "os"
     8     "strings"
     9 )
    10 
    11 func main() {
    12 FOREND:
    13     for {
    14         readerMenu()
    15 
    16         var ch string
    17         fmt.Scanln(&ch)
    18         var (
    19             data []byte
    20             err  error
    21         )
    22         switch strings.ToLower(ch) {
    23         case "1":
    24             fmt.Println("请输入不多于9个字符,以回车结束:")
    25             data, err = ReadFrom(os.Stdin, 11)
    26         case "2":
    27             file, err := os.Open("D:/src/read.go")
    28             if err != nil {
    29                 fmt.Println("打开文件 read.go:", err)
    30                 continue
    31             }
    32             data, err = ReadFrom(file, 9)
    33             file.Close()
    34         case "3":
    35             data, err = ReadFrom(strings.NewReader("from string"), 12)
    36         case "4":
    37             fmt.Println("暂未实现!")
    38         case "b":
    39             fmt.Println("返回上级菜单!")
    40             break FOREND
    41         case "q":
    42             fmt.Println("程序退出!")
    43             os.Exit(0)
    44         default:
    45             fmt.Println("输入错误!")
    46             continue
    47         }
    48 
    49         if err != nil {
    50             fmt.Println("数据读取失败,可以试试从其他输入源读取!")
    51         } else {
    52             fmt.Printf("读取到的数据是:%s
    ", data)
    53         }
    54     }
    55 }
    56 
    57 func ReadFrom(reader io.Reader, num int) ([]byte, error) {
    58     p := make([]byte, num)
    59     n, err := reader.Read(p)
    60     if n > 0 {
    61         return p[:n], nil
    62     }
    63     return p, err
    64 }
    65 
    66 func readerMenu() {
    67     fmt.Println("")
    68     fmt.Println("*******从不同来源读取数据*********")
    69     fmt.Println("*******请选择数据源,请输入:*********")
    70     fmt.Println("1 表示 标准输入")
    71     fmt.Println("2 表示 普通文件")
    72     fmt.Println("3 表示 从字符串")
    73     fmt.Println("4 表示 从网络")
    74     fmt.Println("b 返回上级菜单")
    75     fmt.Println("q 退出")
    76     fmt.Println("***********************************")
    77 }

    interface:

    C:Gosrcpkgioio.go

     1 // Reader is the interface that wraps the basic Read method.
     2 //
     3 // Read reads up to len(p) bytes into p.  It returns the number of bytes
     4 // read (0 <= n <= len(p)) and any error encountered.  Even if Read
     5 // returns n < len(p), it may use all of p as scratch space during the call.
     6 // If some data is available but not len(p) bytes, Read conventionally
     7 // returns what is available instead of waiting for more.
     8 //
     9 // When Read encounters an error or end-of-file condition after
    10 // successfully reading n > 0 bytes, it returns the number of
    11 // bytes read.  It may return the (non-nil) error from the same call
    12 // or return the error (and n == 0) from a subsequent call.
    13 // An instance of this general case is that a Reader returning
    14 // a non-zero number of bytes at the end of the input stream may
    15 // return either err == EOF or err == nil.  The next Read should
    16 // return 0, EOF regardless.
    17 //
    18 // Callers should always process the n > 0 bytes returned before
    19 // considering the error err.  Doing so correctly handles I/O errors
    20 // that happen after reading some bytes and also both of the
    21 // allowed EOF behaviors.
    22 //
    23 // Implementations of Read are discouraged from returning a
    24 // zero byte count with a nil error, and callers should treat
    25 // that situation as a no-op.
    26 type Reader interface {
    27     Read(p []byte) (n int, err error)
    28 }

    implements:

    C:Gosrcpkgosfile.go

    1 // Stdin, Stdout, and Stderr are open Files pointing to the standard input,
    2 // standard output, and standard error file descriptors.
    3 var (
    4     Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
    5     Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
    6     Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
    7 )
     1 // Read reads up to len(b) bytes from the File.
     2 // It returns the number of bytes read and an error, if any.
     3 // EOF is signaled by a zero count with err set to io.EOF.
     4 func (f *File) Read(b []byte) (n int, err error) {
     5     if f == nil {
     6         return 0, ErrInvalid
     7     }
     8     n, e := f.read(b)
     9     if n < 0 {
    10         n = 0
    11     }
    12     if n == 0 && len(b) > 0 && e == nil {
    13         return 0, io.EOF
    14     }
    15     if e != nil {
    16         err = &PathError{"read", f.name, e}
    17     }
    18     return n, err
    19 }

    C:Gosrcpkgstrings eader.go

    package strings
    
    import (
        "errors"
        "io"
        "unicode/utf8"
    )
    
    // A Reader implements the io.Reader, io.ReaderAt, io.Seeker, io.WriterTo,
    // io.ByteScanner, and io.RuneScanner interfaces by reading
    // from a string.
    type Reader struct {
        s        string
        i        int // current reading index
        prevRune int // index of previous rune; or < 0
    }
    
    
    func (r *Reader) Read(b []byte) (n int, err error) {
        if len(b) == 0 {
            return 0, nil
        }
        if r.i >= len(r.s) {
            return 0, io.EOF
        }
        n = copy(b, r.s[r.i:])
        r.i += n
        r.prevRune = -1
        return
    }

    2) io.Writer

    interface

     C:Gosrcpkgioio.go

    1 // Writer is the interface that wraps the basic Write method.
    2 //
    3 // Write writes len(p) bytes from p to the underlying data stream.
    4 // It returns the number of bytes written from p (0 <= n <= len(p))
    5 // and any error encountered that caused the write to stop early.
    6 // Write must return a non-nil error if it returns n < len(p).
    7 type Writer interface {
    8     Write(p []byte) (n int, err error)
    9 }

    implements

    C:Gosrcpkgosfile.go

     1 // Write writes len(b) bytes to the File.
     2 // It returns the number of bytes written and an error, if any.
     3 // Write returns a non-nil error when n != len(b).
     4 func (f *File) Write(b []byte) (n int, err error) {
     5     if f == nil {
     6         return 0, ErrInvalid
     7     }
     8     n, e := f.write(b)
     9     if n < 0 {
    10         n = 0
    11     }
    12 
    13     epipecheck(f, e)
    14 
    15     if e != nil {
    16         err = &PathError{"write", f.name, e}
    17     }
    18     return n, err
    19 }

     3) test

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "io"
     6     "os"
     7 )
     8 
     9 func main() {
    10     inFile, err := os.Open("d:/src/read.go")
    11     if err != nil {
    12         fmt.Println("can't open file d:/src/read.go")
    13         os.Exit(1)               //???????
    14     }
    15     defer inFile.Close()
    16 
    17     outFile, err := os.Create("d:/src/output.txt")
    18     if err != nil {
    19         fmt.Println("can't create file d:/src/output.txt")
    20         os.Exit(1)
    21     }
    22     defer outFile.Close()
    23 
    24     for {
    25         buf := make([]byte, 20)
    26         n, err := inFile.Read(buf)
    27         if n == 0 && err == io.EOF {     //???????
    28             fmt.Println("Done")
    29             return
    30         }
    31         if err != nil {
    32             fmt.Println("error occurs during reading")
    33             os.Exit(2)
    34         }
    35 
    36         _, err = outFile.Write(buf[:n])   //????????
    37         if err != nil {
    38             fmt.Println("error occurs during writing")
    39             os.Exit(3)
    40         }
    41     }
    42 
    43 }

    4. package os,log,  encoding/json

     
     1 // Unmarshal parses the JSON-encoded data and stores the result
     2 // in the value pointed to by v.
     3 //
     4 // Unmarshal uses the inverse of the encodings that
     5 // Marshal uses, allocating maps, slices, and pointers as necessary,
     6 // with the following additional rules:
     7 //
     8 // To unmarshal JSON into a pointer, Unmarshal first handles the case of
     9 // the JSON being the JSON literal null.  In that case, Unmarshal sets
    10 // the pointer to nil.  Otherwise, Unmarshal unmarshals the JSON into
    11 // the value pointed at by the pointer.  If the pointer is nil, Unmarshal
    12 // allocates a new value for it to point to.
    13 //
    14 // To unmarshal JSON into a struct, Unmarshal matches incoming object
    15 // keys to the keys used by Marshal (either the struct field name or its tag),
    16 // preferring an exact match but also accepting a case-insensitive match.
    17 //
    18 // To unmarshal JSON into an interface value,
    19 // Unmarshal stores one of these in the interface value:
    20 //
    21 //    bool, for JSON booleans
    22 //    float64, for JSON numbers
    23 //    string, for JSON strings
    24 //    []interface{}, for JSON arrays
    25 //    map[string]interface{}, for JSON objects
    26 //    nil for JSON null
    27 //
    28 // If a JSON value is not appropriate for a given target type,
    29 // or if a JSON number overflows the target type, Unmarshal
    30 // skips that field and completes the unmarshalling as best it can.
    31 // If no more serious errors are encountered, Unmarshal returns
    32 // an UnmarshalTypeError describing the earliest such error.
    33 //
    34 // When unmarshaling quoted strings, invalid UTF-8 or
    35 // invalid UTF-16 surrogate pairs are not treated as an error.
    36 // Instead, they are replaced by the Unicode replacement
    37 // character U+FFFD.
    38 //
    39 func Unmarshal(data []byte, v interface{}) error {
    40     // Check for well-formedness.
    41     // Avoids filling out half a data structure
    42     // before discovering a JSON syntax error.
    43     var d decodeState
    44     err := checkValid(data, &d.scan)
    45     if err != nil {
    46         return err
    47     }
    48 
    49     d.init(data)
    50     return d.unmarshal(v)
    51 }
    52 
    53 // Unmarshaler is the interface implemented by objects
    54 // that can unmarshal a JSON description of themselves.
    55 // The input can be assumed to be a valid encoding of
    56 // a JSON value. UnmarshalJSON must copy the JSON data
    57 // if it wishes to retain the data after returning.
    58 type Unmarshaler interface {
    59     UnmarshalJSON([]byte) error
    60 }
    
    
    
     
  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/harrysun/p/3550208.html
Copyright © 2011-2022 走看看