github.com/yukk001/go1.10.8@v0.0.0-20190813125351-6df2d3982e20/doc/progs/interface.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // This file contains the code snippets included in "The Laws of Reflection."
     6  
     7  package main
     8  
     9  import (
    10  	"bufio"
    11  	"bytes"
    12  	"io"
    13  	"os"
    14  )
    15  
    16  type MyInt int
    17  
    18  var i int
    19  var j MyInt
    20  
    21  // STOP OMIT
    22  
    23  // Reader is the interface that wraps the basic Read method.
    24  type Reader interface {
    25  	Read(p []byte) (n int, err error)
    26  }
    27  
    28  // Writer is the interface that wraps the basic Write method.
    29  type Writer interface {
    30  	Write(p []byte) (n int, err error)
    31  }
    32  
    33  // STOP OMIT
    34  
    35  func readers() { // OMIT
    36  	var r io.Reader
    37  	r = os.Stdin
    38  	r = bufio.NewReader(r)
    39  	r = new(bytes.Buffer)
    40  	// and so on
    41  	// STOP OMIT
    42  }
    43  
    44  func typeAssertions() (interface{}, error) { // OMIT
    45  	var r io.Reader
    46  	tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  	r = tty
    51  	// STOP OMIT
    52  	var w io.Writer
    53  	w = r.(io.Writer)
    54  	// STOP OMIT
    55  	var empty interface{}
    56  	empty = w
    57  	// STOP OMIT
    58  	return empty, err
    59  }
    60  
    61  func main() {
    62  }