dfg
This commit is contained in:
parent
1072400433
commit
00b9ce122d
3
book_with_bridge/interfaces/go.mod
Normal file
3
book_with_bridge/interfaces/go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
go 1.25.5
|
||||||
112
book_with_bridge/interfaces/main.go
Normal file
112
book_with_bridge/interfaces/main.go
Normal file
|
|
@ -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))
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user