From 00b9ce122d37e816ca989151527ca30aa574d684 Mon Sep 17 00:00:00 2001 From: Alexander Pivkin Date: Mon, 29 Dec 2025 17:38:54 +0300 Subject: [PATCH] dfg --- book_with_bridge/interfaces/go.mod | 3 + book_with_bridge/interfaces/main.go | 112 ++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 book_with_bridge/interfaces/go.mod create mode 100644 book_with_bridge/interfaces/main.go diff --git a/book_with_bridge/interfaces/go.mod b/book_with_bridge/interfaces/go.mod new file mode 100644 index 0000000..371eb8f --- /dev/null +++ b/book_with_bridge/interfaces/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.25.5 diff --git a/book_with_bridge/interfaces/main.go b/book_with_bridge/interfaces/main.go new file mode 100644 index 0000000..fb5317c --- /dev/null +++ b/book_with_bridge/interfaces/main.go @@ -0,0 +1,112 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "os" + "strings" +) + +type ByteCount int + +func (bc *ByteCount) Write(p []byte) (n int,err error) { + *bc = ByteCount(len(p)) + return len(p),nil +} + +type WordsNum int + +func (wn *WordsNum) Write(p []byte) (n int,err error) { + *wn = WordsNum(len(p)) + return len(p),nil +} + +func Count() []byte { + scanner := bufio.NewScanner(os.Stdin) + + fmt.Print("Enter text here: ") + if scanner.Scan() { + line := scanner.Text() + + wordCount := bufio.NewScanner(strings.NewReader(line)) + wordCount.Split(bufio.ScanWords) + + wordsNum := []byte{} + for wordCount.Scan() { + wordsNum = append(wordsNum, 1) + fmt.Println("Word is: ",wordCount.Text()) + } + fmt.Printf("Amount of words is %d\n",wordsNum) + return wordsNum + } + return nil +} + +type NewWriter struct { + writer io.Writer + counter *int64 +} + +func (nw *NewWriter) Write(p []byte) (n int,err error) { + n,err = nw.writer.Write(p) + fmt.Println() + *nw.counter = int64(n) + return n,err +} + +func CountingWriter(w io.Writer) (io.Writer, *int64) { + counter := int64(0) + return &NewWriter{ + writer: w, + counter: &counter, + },&counter +} + +// Упражнения на возврат LimitReader +func GetNewReader(s string) io.Reader { + return strings.NewReader(s) +} + +type MyReader struct { + reader io.Reader + constraint int +} + +func (nr MyReader) Read(p []byte) (n int,err error) { + n,err = nr.reader.Read(p[:nr.constraint]) + return + +} + +func LimitReader(r io.Reader,n int) io.Reader { + return MyReader{ + reader: r, + constraint: n, + } +} + +func main() { + // var bc ByteCount + // bc.Write([]byte("Hello dodik")) + // fmt.Println(bc) + + // var wn WordsNum + // wn.Write(Count()) + // fmt.Println(wn) + + // writer,count := CountingWriter(os.Stdout) + // writer.Write([]byte("Hello Baga")) + // fmt.Printf("Bytes %d",*count) + + str := "hello" + buf := make([]byte,100) + reader := LimitReader(strings.NewReader(str),3) + // n,_ := reader.Read(buf) + // reader := strings.NewReader(str) + n,_ := reader.Read(buf) + fmt.Printf("Result is %d\n",n) + fmt.Printf("String is %s",string(buf)) + + +}