github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/analysis/passes/ifaceassert/testdata/src/a/a.go (about)

     1  // Copyright 2020 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 tests for the ifaceassert checker.
     6  
     7  package a
     8  
     9  import "io"
    10  
    11  func InterfaceAssertionTest() {
    12  	var (
    13  		a io.ReadWriteSeeker
    14  		b interface {
    15  			Read()
    16  			Write()
    17  		}
    18  	)
    19  	_ = a.(io.Reader)
    20  	_ = a.(io.ReadWriter)
    21  	_ = b.(io.Reader)  // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.Reader \(conflicting types for Read method\)$`
    22  	_ = b.(interface { // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and interface{Read\(p \[\]byte\) \(n int, err error\)} \(conflicting types for Read method\)$`
    23  		Read(p []byte) (n int, err error)
    24  	})
    25  
    26  	switch a.(type) {
    27  	case io.ReadWriter:
    28  	case interface { // want `^impossible type assertion: no type can implement both io.ReadWriteSeeker and interface{Write\(\)} \(conflicting types for Write method\)$`
    29  		Write()
    30  	}:
    31  	default:
    32  	}
    33  
    34  	switch b := b.(type) {
    35  	case io.ReadWriter, interface{ Read() }: // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.ReadWriter \(conflicting types for Read method\)$`
    36  	case io.Writer: // want `^impossible type assertion: no type can implement both interface{Read\(\); Write\(\)} and io.Writer \(conflicting types for Write method\)$`
    37  	default:
    38  		_ = b
    39  	}
    40  }