File: issue-1260.go

package info (click to toggle)
golang-github-traefik-yaegi 0.16.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 24,608 kB
  • sloc: sh: 457; makefile: 39
file content (67 lines) | stat: -rw-r--r-- 1,577 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main

import (
	"fmt"
	"io"
	"os"
)

type WriteSyncer interface {
	io.Writer
	Sync() error
}

type Sink interface {
	WriteSyncer
	io.Closer
}

func newFileSink(path string) (Sink, error) {
	return os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
}

type Sink1 struct{ name string }

func (s Sink1) Write(b []byte) (int, error) { println("in Write"); return 0, nil }
func (s Sink1) Sync() error                 { println("in Sync"); return nil }
func (s Sink1) Close() error                { println("in Close", s.name); return nil }
func newS1(name string) Sink                { return Sink1{name} }
func newS1p(name string) Sink               { return &Sink1{name} }

type Sink2 struct{ name string }

func (s *Sink2) Write(b []byte) (int, error) { println("in Write"); return 0, nil }
func (s *Sink2) Sync() error                 { println("in Sync"); return nil }
func (s *Sink2) Close() error                { println("in Close", s.name); return nil }
func newS2(name string) Sink                 { return Sink1{name} }

func main() {
	tmpfile, err := os.CreateTemp("", "xxx")
	if err != nil {
		panic(err)
	}
	defer os.Remove(tmpfile.Name())
	closers := []io.Closer{}
	sink, err := newFileSink(tmpfile.Name())
	if err != nil {
		panic(err)
	}
	closers = append(closers, sink)

	s1p := newS1p("ptr")
	s1 := newS1("struct")
	s2 := newS2("ptr2")
	closers = append(closers, s1p, s1, s2)
	for _, closer := range closers {
		fmt.Println(closer.Close())
	}
}

// Output:
// <nil>
// in Close ptr
// <nil>
// in Close struct
// <nil>
// in Close ptr2
// <nil>