Skip to content

Commit 7afccdb

Browse files
authored
Merge pull request #832 from devlights/add-buffer-availablebuffer-example
2 parents faa848e + f49155c commit 7afccdb

File tree

3 files changed

+93
-7
lines changed

3 files changed

+93
-7
lines changed

examples/basic/bufferop/README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
このディレクトリには以下のサンプルがあります。
44

5-
| file | example name | note |
6-
| ---------------- | ---------------------- | ---------------------------------------------------- |
7-
| zerovalue.go | bufferop_zero_value | bytes.Buffer を ゼロ値 で利用した場合のサンプルです |
8-
| frombytes.go | bufferop_from_bytes | bytes.Buffer を バイト列 から生成するサンプルです |
9-
| fromstring.go | bufferop_from_string | bytes.Buffer を 文字列 から生成するサンプルです |
10-
| use_as_reader.go | bufferop_use_as_reader | bytes.Buffer を io.Reader として利用するサンプルです |
11-
| use_as_writer.go | bufferop_use_as_writer | bytes.Buffer を io.Writer として利用するサンプルです |
5+
| file | example name | note |
6+
| ------------------ | ------------------------- | -------------------------------------------------------------------- |
7+
| zerovalue.go | bufferop_zero_value | bytes.Buffer を ゼロ値 で利用した場合のサンプルです |
8+
| frombytes.go | bufferop_from_bytes | bytes.Buffer を バイト列 から生成するサンプルです |
9+
| fromstring.go | bufferop_from_string | bytes.Buffer を 文字列 から生成するサンプルです |
10+
| use_as_reader.go | bufferop_use_as_reader | bytes.Buffer を io.Reader として利用するサンプルです |
11+
| use_as_writer.go | bufferop_use_as_writer | bytes.Buffer を io.Writer として利用するサンプルです |
12+
| availablebuffer.go | bufferop_available_buffer | Go 1.21 で追加された Buffer.AvailableBuffer() についてのサンプルです |
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package bufferop
2+
3+
import (
4+
"bytes"
5+
6+
"github.com/devlights/gomy/output"
7+
)
8+
9+
// AvailableBuffer は、Go 1.21 で追加された Buffer.AvailableBuffer() についてのサンプルです。
10+
//
11+
// > AvailableBuffer returns an empty buffer with b.Available() capacity.
12+
// This buffer is intended to be appended to and passed to an immediately succeeding Buffer.Write call.
13+
// The buffer is only valid until the next write operation on b.
14+
//
15+
// > (AvailableBufferは、b.Available()の容量を持つ空のバッファを返します。
16+
// このバッファは、直後のBuffer.Write呼び出しに追加され、渡されることを意図しています。
17+
// このバッファは、bに対する次の書き込み操作が行われるまで有効です。)
18+
//
19+
// # REFERENCES
20+
// - https://pkg.go.dev/bytes@go1.22.4#Buffer.AvailableBuffer
21+
func AvailableBuffer() error {
22+
var (
23+
buf bytes.Buffer
24+
data []byte
25+
logfn = func(buf *bytes.Buffer, data []byte) {
26+
output.Stdoutl("[Available ]", buf.Available())
27+
output.Stdoutf("[AvailableBuffer]", "data=%v\tlen=%d\tcap=%d\n", data, len(data), cap(data))
28+
output.Stdoutl("[Bytes Length ]", len(buf.Bytes()))
29+
output.StdoutHr()
30+
}
31+
)
32+
33+
buf.Grow(1 << 11)
34+
35+
data = buf.AvailableBuffer()
36+
{
37+
logfn(&buf, data)
38+
39+
data = append(data, []byte("helloworld")...)
40+
_, _ = buf.Write(data)
41+
}
42+
43+
data = buf.AvailableBuffer()
44+
{
45+
logfn(&buf, data)
46+
47+
var b [1 << 10]byte
48+
data = append(data, b[:]...)
49+
_, _ = buf.Write(data)
50+
}
51+
52+
data = buf.AvailableBuffer()
53+
{
54+
logfn(&buf, data)
55+
}
56+
57+
return nil
58+
59+
/*
60+
$ task
61+
task: [build] go build .
62+
task: [run] ./try-golang -onetime
63+
64+
ENTER EXAMPLE NAME: bufferop_available_buffer
65+
66+
[Name] "bufferop_available_buffer"
67+
[Available ] 2048
68+
[AvailableBuffer] data=[] len=0 cap=2048
69+
[Bytes Length ] 0
70+
--------------------------------------------------
71+
[Available ] 2038
72+
[AvailableBuffer] data=[] len=0 cap=2038
73+
[Bytes Length ] 10
74+
--------------------------------------------------
75+
[Available ] 1014
76+
[AvailableBuffer] data=[] len=0 cap=1014
77+
[Bytes Length ] 1034
78+
--------------------------------------------------
79+
80+
81+
[Elapsed] 105.66µs
82+
*/
83+
84+
}

examples/basic/bufferop/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ func (r *register) Regist(m mapping.ExampleMapping) {
1818
m["bufferop_from_bytes"] = FromBytes
1919
m["bufferop_use_as_reader"] = UseAsReader
2020
m["bufferop_use_as_writer"] = UseAsWriter
21+
m["bufferop_available_buffer"] = AvailableBuffer
2122
}

0 commit comments

Comments
 (0)