Replace deprecated ioutil functions with others (#374)
* Remove use of deprecated ioutil functions from examples * Remove usage of ioutil from gobyexample's own scripts + regenerate output
This commit is contained in:
parent
952453859f
commit
ac94809b64
@ -5,7 +5,6 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
@ -32,7 +31,7 @@ func main() {
|
||||
// Helper function to create a new empty file.
|
||||
createEmptyFile := func(name string) {
|
||||
d := []byte("")
|
||||
check(ioutil.WriteFile(name, d, 0644))
|
||||
check(os.WriteFile(name, d, 0644))
|
||||
}
|
||||
|
||||
createEmptyFile("subdir/file1")
|
||||
@ -48,8 +47,8 @@ func main() {
|
||||
createEmptyFile("subdir/parent/child/file4")
|
||||
|
||||
// `ReadDir` lists directory contents, returning a
|
||||
// slice of `os.FileInfo` objects.
|
||||
c, err := ioutil.ReadDir("subdir/parent")
|
||||
// slice of `os.DirEntry` objects.
|
||||
c, err := os.ReadDir("subdir/parent")
|
||||
check(err)
|
||||
|
||||
fmt.Println("Listing subdir/parent")
|
||||
@ -64,7 +63,7 @@ func main() {
|
||||
|
||||
// Now we'll see the contents of `subdir/parent/child`
|
||||
// when listing the *current* directory.
|
||||
c, err = ioutil.ReadDir(".")
|
||||
c, err = os.ReadDir(".")
|
||||
check(err)
|
||||
|
||||
fmt.Println("Listing subdir/parent/child")
|
||||
|
@ -1,2 +1,2 @@
|
||||
fa3655fa8f4fa28e971cbe853dffb02773afce83
|
||||
UaeLMS5VQVR
|
||||
d2eaefdc6dbeaf130e4824403baa948b5845c0ec
|
||||
cICbVSX51zI
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
@ -24,7 +23,7 @@ func main() {
|
||||
|
||||
// Perhaps the most basic file reading task is
|
||||
// slurping a file's entire contents into memory.
|
||||
dat, err := ioutil.ReadFile("/tmp/dat")
|
||||
dat, err := os.ReadFile("/tmp/dat")
|
||||
check(err)
|
||||
fmt.Print(string(dat))
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
3420958bafd67fd997481d1ada288566666343c7
|
||||
kF0cDC0drsX
|
||||
5351edae47bb2f2c9b5d4b9682b8176beb0c24e5
|
||||
DF2Wo8nDKaF
|
||||
|
@ -9,7 +9,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"io"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
@ -46,7 +46,7 @@ func main() {
|
||||
grepCmd.Start()
|
||||
grepIn.Write([]byte("hello grep\ngoodbye grep"))
|
||||
grepIn.Close()
|
||||
grepBytes, _ := ioutil.ReadAll(grepOut)
|
||||
grepBytes, _ := io.ReadAll(grepOut)
|
||||
grepCmd.Wait()
|
||||
|
||||
// We omitted error checks in the above example, but
|
||||
|
@ -1,2 +1,2 @@
|
||||
6a62e3109c483c2b52a99905dc1ba5c8cb2a281b
|
||||
m2CpSlHPEVq
|
||||
b6e1e4b70a494be9f344a9f31aff520116d0ac24
|
||||
YJs_YtJY0sS
|
||||
|
@ -8,7 +8,6 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
@ -22,17 +21,17 @@ func check(e error) {
|
||||
func main() {
|
||||
|
||||
// The easiest way to create a temporary file is by
|
||||
// calling `ioutil.TempFile`. It creates a file *and*
|
||||
// calling `os.CreateTemp`. It creates a file *and*
|
||||
// opens it for reading and writing. We provide `""`
|
||||
// as the first argument, so `ioutil.TempFile` will
|
||||
// as the first argument, so `os.CreateTemp` will
|
||||
// create the file in the default location for our OS.
|
||||
f, err := ioutil.TempFile("", "sample")
|
||||
f, err := os.CreateTemp("", "sample")
|
||||
check(err)
|
||||
|
||||
// Display the name of the temporary file. On
|
||||
// Unix-based OSes the directory will likely be `/tmp`.
|
||||
// The file name starts with the prefix given as the
|
||||
// second argument to `ioutil.TempFile` and the rest
|
||||
// second argument to `os.CreateTemp` and the rest
|
||||
// is chosen automatically to ensure that concurrent
|
||||
// calls will always create different file names.
|
||||
fmt.Println("Temp file name:", f.Name())
|
||||
@ -49,10 +48,10 @@ func main() {
|
||||
|
||||
// If we intend to write many temporary files, we may
|
||||
// prefer to create a temporary *directory*.
|
||||
// `ioutil.TempDir`'s arguments are the same as
|
||||
// `TempFile`'s, but it returns a directory *name*
|
||||
// `os.MkdirTemp`'s arguments are the same as
|
||||
// `CreateTemp`'s, but it returns a directory *name*
|
||||
// rather than an open file.
|
||||
dname, err := ioutil.TempDir("", "sampledir")
|
||||
dname, err := os.MkdirTemp("", "sampledir")
|
||||
check(err)
|
||||
fmt.Println("Temp dir name:", dname)
|
||||
|
||||
@ -61,6 +60,6 @@ func main() {
|
||||
// Now we can synthesize temporary file names by
|
||||
// prefixing them with our temporary directory.
|
||||
fname := filepath.Join(dname, "file1")
|
||||
err = ioutil.WriteFile(fname, []byte{1, 2}, 0666)
|
||||
err = os.WriteFile(fname, []byte{1, 2}, 0666)
|
||||
check(err)
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
cc4755e23cb4ba3c0e0ef5554ec9e9477372422a
|
||||
nMpjCsALS6P
|
||||
d875fd8f061e895d72c48c360a8ad4b04e406dd4
|
||||
hVcPg9RH3_V
|
||||
|
@ -6,7 +6,6 @@ package main
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
@ -21,7 +20,7 @@ func main() {
|
||||
// To start, here's how to dump a string (or just
|
||||
// bytes) into a file.
|
||||
d1 := []byte("hello\ngo\n")
|
||||
err := ioutil.WriteFile("/tmp/dat1", d1, 0644)
|
||||
err := os.WriteFile("/tmp/dat1", d1, 0644)
|
||||
check(err)
|
||||
|
||||
// For more granular writes, open a file for writing.
|
||||
|
@ -1,2 +1,2 @@
|
||||
314a0074840e22b328b6412130c17b9bea53c9c9
|
||||
fQ7sd4gXv0F
|
||||
e312100df0c063ecd65e7599653636188277b6a6
|
||||
Y12O-L_zFS1
|
||||
|
13
public/directories
generated
13
public/directories
generated
@ -42,7 +42,7 @@
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/UaeLMS5VQVR"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/cICbVSX51zI"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -56,7 +56,6 @@
|
||||
|
||||
<pre class="chroma"><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="s">"fmt"</span>
|
||||
<span class="s">"io/ioutil"</span>
|
||||
<span class="s">"os"</span>
|
||||
<span class="s">"path/filepath"</span>
|
||||
<span class="p">)</span>
|
||||
@ -131,7 +130,7 @@ will delete a whole directory tree (similarly to
|
||||
<pre class="chroma">
|
||||
<span class="nx">createEmptyFile</span> <span class="o">:=</span> <span class="kd">func</span><span class="p">(</span><span class="nx">name</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="nx">d</span> <span class="o">:=</span> <span class="p">[]</span><span class="nb">byte</span><span class="p">(</span><span class="s">""</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">ioutil</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">d</span><span class="p">,</span> <span class="mo">0644</span><span class="p">))</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">d</span><span class="p">,</span> <span class="mo">0644</span><span class="p">))</span>
|
||||
<span class="p">}</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -180,13 +179,13 @@ command-line <code>mkdir -p</code>.</p>
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p><code>ReadDir</code> lists directory contents, returning a
|
||||
slice of <code>os.FileInfo</code> objects.</p>
|
||||
slice of <code>os.DirEntry</code> objects.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">c</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadDir</span><span class="p">(</span><span class="s">"subdir/parent"</span><span class="p">)</span>
|
||||
<span class="nx">c</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">ReadDir</span><span class="p">(</span><span class="s">"subdir/parent"</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -230,7 +229,7 @@ when listing the <em>current</em> directory.</p>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">c</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadDir</span><span class="p">(</span><span class="s">"."</span><span class="p">)</span>
|
||||
<span class="nx">c</span><span class="p">,</span> <span class="nx">err</span> <span class="p">=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">ReadDir</span><span class="p">(</span><span class="s">"."</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -343,7 +342,7 @@ recursively by <code>filepath.Walk</code>.</p>
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"io/ioutil\"\u000A \"os\"\u000A \"path/filepath\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' err :\u003D os.Mkdir(\"subdir\", 0755)\u000A check(err)\u000A');codeLines.push(' defer os.RemoveAll(\"subdir\")\u000A');codeLines.push(' createEmptyFile :\u003D func(name string) {\u000A d :\u003D []byte(\"\")\u000A check(ioutil.WriteFile(name, d, 0644))\u000A }\u000A');codeLines.push(' createEmptyFile(\"subdir/file1\")\u000A');codeLines.push(' err \u003D os.MkdirAll(\"subdir/parent/child\", 0755)\u000A check(err)\u000A');codeLines.push(' createEmptyFile(\"subdir/parent/file2\")\u000A createEmptyFile(\"subdir/parent/file3\")\u000A createEmptyFile(\"subdir/parent/child/file4\")\u000A');codeLines.push(' c, err :\u003D ioutil.ReadDir(\"subdir/parent\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Listing subdir/parent\")\u000A for _, entry :\u003D range c {\u000A fmt.Println(\" \", entry.Name(), entry.IsDir())\u000A }\u000A');codeLines.push(' err \u003D os.Chdir(\"subdir/parent/child\")\u000A check(err)\u000A');codeLines.push(' c, err \u003D ioutil.ReadDir(\".\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Listing subdir/parent/child\")\u000A for _, entry :\u003D range c {\u000A fmt.Println(\" \", entry.Name(), entry.IsDir())\u000A }\u000A');codeLines.push(' err \u003D os.Chdir(\"../../..\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Visiting subdir\")\u000A err \u003D filepath.Walk(\"subdir\", visit)\u000A}\u000A');codeLines.push('func visit(p string, info os.FileInfo, err error) error {\u000A if err !\u003D nil {\u000A return err\u000A }\u000A fmt.Println(\" \", p, info.IsDir())\u000A return nil\u000A}\u000A');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"os\"\u000A \"path/filepath\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' err :\u003D os.Mkdir(\"subdir\", 0755)\u000A check(err)\u000A');codeLines.push(' defer os.RemoveAll(\"subdir\")\u000A');codeLines.push(' createEmptyFile :\u003D func(name string) {\u000A d :\u003D []byte(\"\")\u000A check(os.WriteFile(name, d, 0644))\u000A }\u000A');codeLines.push(' createEmptyFile(\"subdir/file1\")\u000A');codeLines.push(' err \u003D os.MkdirAll(\"subdir/parent/child\", 0755)\u000A check(err)\u000A');codeLines.push(' createEmptyFile(\"subdir/parent/file2\")\u000A createEmptyFile(\"subdir/parent/file3\")\u000A createEmptyFile(\"subdir/parent/child/file4\")\u000A');codeLines.push(' c, err :\u003D os.ReadDir(\"subdir/parent\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Listing subdir/parent\")\u000A for _, entry :\u003D range c {\u000A fmt.Println(\" \", entry.Name(), entry.IsDir())\u000A }\u000A');codeLines.push(' err \u003D os.Chdir(\"subdir/parent/child\")\u000A check(err)\u000A');codeLines.push(' c, err \u003D os.ReadDir(\".\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Listing subdir/parent/child\")\u000A for _, entry :\u003D range c {\u000A fmt.Println(\" \", entry.Name(), entry.IsDir())\u000A }\u000A');codeLines.push(' err \u003D os.Chdir(\"../../..\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Visiting subdir\")\u000A err \u003D filepath.Walk(\"subdir\", visit)\u000A}\u000A');codeLines.push('func visit(p string, info os.FileInfo, err error) error {\u000A if err !\u003D nil {\u000A return err\u000A }\u000A fmt.Println(\" \", p, info.IsDir())\u000A return nil\u000A}\u000A');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
7
public/reading-files
generated
7
public/reading-files
generated
@ -43,7 +43,7 @@ reading files.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/kF0cDC0drsX"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/DF2Wo8nDKaF"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -59,7 +59,6 @@ reading files.</p>
|
||||
<span class="s">"bufio"</span>
|
||||
<span class="s">"fmt"</span>
|
||||
<span class="s">"io"</span>
|
||||
<span class="s">"io/ioutil"</span>
|
||||
<span class="s">"os"</span>
|
||||
<span class="p">)</span>
|
||||
</pre>
|
||||
@ -104,7 +103,7 @@ slurping a file’s entire contents into memory.</p>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">dat</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadFile</span><span class="p">(</span><span class="s">"/tmp/dat"</span><span class="p">)</span>
|
||||
<span class="nx">dat</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">ReadFile</span><span class="p">(</span><span class="s">"/tmp/dat"</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="nb">string</span><span class="p">(</span><span class="nx">dat</span><span class="p">))</span>
|
||||
</pre>
|
||||
@ -282,7 +281,7 @@ be scheduled immediately after <code>Open</code>ing with
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"bufio\"\u000A \"fmt\"\u000A \"io\"\u000A \"io/ioutil\"\u000A \"os\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' dat, err :\u003D ioutil.ReadFile(\"/tmp/dat\")\u000A check(err)\u000A fmt.Print(string(dat))\u000A');codeLines.push(' f, err :\u003D os.Open(\"/tmp/dat\")\u000A check(err)\u000A');codeLines.push(' b1 :\u003D make([]byte, 5)\u000A n1, err :\u003D f.Read(b1)\u000A check(err)\u000A fmt.Printf(\"%d bytes: %s\\n\", n1, string(b1[:n1]))\u000A');codeLines.push(' o2, err :\u003D f.Seek(6, 0)\u000A check(err)\u000A b2 :\u003D make([]byte, 2)\u000A n2, err :\u003D f.Read(b2)\u000A check(err)\u000A fmt.Printf(\"%d bytes @ %d: \", n2, o2)\u000A fmt.Printf(\"%v\\n\", string(b2[:n2]))\u000A');codeLines.push(' o3, err :\u003D f.Seek(6, 0)\u000A check(err)\u000A b3 :\u003D make([]byte, 2)\u000A n3, err :\u003D io.ReadAtLeast(f, b3, 2)\u000A check(err)\u000A fmt.Printf(\"%d bytes @ %d: %s\\n\", n3, o3, string(b3))\u000A');codeLines.push(' _, err \u003D f.Seek(0, 0)\u000A check(err)\u000A');codeLines.push(' r4 :\u003D bufio.NewReader(f)\u000A b4, err :\u003D r4.Peek(5)\u000A check(err)\u000A fmt.Printf(\"5 bytes: %s\\n\", string(b4))\u000A');codeLines.push(' f.Close()\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"bufio\"\u000A \"fmt\"\u000A \"io\"\u000A \"os\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' dat, err :\u003D os.ReadFile(\"/tmp/dat\")\u000A check(err)\u000A fmt.Print(string(dat))\u000A');codeLines.push(' f, err :\u003D os.Open(\"/tmp/dat\")\u000A check(err)\u000A');codeLines.push(' b1 :\u003D make([]byte, 5)\u000A n1, err :\u003D f.Read(b1)\u000A check(err)\u000A fmt.Printf(\"%d bytes: %s\\n\", n1, string(b1[:n1]))\u000A');codeLines.push(' o2, err :\u003D f.Seek(6, 0)\u000A check(err)\u000A b2 :\u003D make([]byte, 2)\u000A n2, err :\u003D f.Read(b2)\u000A check(err)\u000A fmt.Printf(\"%d bytes @ %d: \", n2, o2)\u000A fmt.Printf(\"%v\\n\", string(b2[:n2]))\u000A');codeLines.push(' o3, err :\u003D f.Seek(6, 0)\u000A check(err)\u000A b3 :\u003D make([]byte, 2)\u000A n3, err :\u003D io.ReadAtLeast(f, b3, 2)\u000A check(err)\u000A fmt.Printf(\"%d bytes @ %d: %s\\n\", n3, o3, string(b3))\u000A');codeLines.push(' _, err \u003D f.Seek(0, 0)\u000A check(err)\u000A');codeLines.push(' r4 :\u003D bufio.NewReader(f)\u000A b4, err :\u003D r4.Peek(5)\u000A check(err)\u000A fmt.Printf(\"5 bytes: %s\\n\", string(b4))\u000A');codeLines.push(' f.Close()\u000A}\u000A');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
8
public/spawning-processes
generated
8
public/spawning-processes
generated
@ -46,7 +46,7 @@ of spawning processes from Go.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/m2CpSlHPEVq"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/YJs_YtJY0sS"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -60,7 +60,7 @@ of spawning processes from Go.</p>
|
||||
|
||||
<pre class="chroma"><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="s">"fmt"</span>
|
||||
<span class="s">"io/ioutil"</span>
|
||||
<span class="s">"io"</span>
|
||||
<span class="s">"os/exec"</span>
|
||||
<span class="p">)</span>
|
||||
</pre>
|
||||
@ -146,7 +146,7 @@ to exit.</p>
|
||||
<span class="nx">grepCmd</span><span class="p">.</span><span class="nf">Start</span><span class="p">()</span>
|
||||
<span class="nx">grepIn</span><span class="p">.</span><span class="nf">Write</span><span class="p">([]</span><span class="nb">byte</span><span class="p">(</span><span class="s">"hello grep\ngoodbye grep"</span><span class="p">))</span>
|
||||
<span class="nx">grepIn</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
|
||||
<span class="nx">grepBytes</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">grepOut</span><span class="p">)</span>
|
||||
<span class="nx">grepBytes</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">io</span><span class="p">.</span><span class="nf">ReadAll</span><span class="p">(</span><span class="nx">grepOut</span><span class="p">)</span>
|
||||
<span class="nx">grepCmd</span><span class="p">.</span><span class="nf">Wait</span><span class="p">()</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -251,7 +251,7 @@ as if we had run them directly from the command-line.</p>
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"io/ioutil\"\u000A \"os/exec\"\u000A)\u000A');codeLines.push('func main() {\u000A');codeLines.push(' dateCmd :\u003D exec.Command(\"date\")\u000A');codeLines.push(' dateOut, err :\u003D dateCmd.Output()\u000A if err !\u003D nil {\u000A panic(err)\u000A }\u000A fmt.Println(\"\u003E date\")\u000A fmt.Println(string(dateOut))\u000A');codeLines.push(' grepCmd :\u003D exec.Command(\"grep\", \"hello\")\u000A');codeLines.push(' grepIn, _ :\u003D grepCmd.StdinPipe()\u000A grepOut, _ :\u003D grepCmd.StdoutPipe()\u000A grepCmd.Start()\u000A grepIn.Write([]byte(\"hello grep\\ngoodbye grep\"))\u000A grepIn.Close()\u000A grepBytes, _ :\u003D ioutil.ReadAll(grepOut)\u000A grepCmd.Wait()\u000A');codeLines.push(' fmt.Println(\"\u003E grep hello\")\u000A fmt.Println(string(grepBytes))\u000A');codeLines.push(' lsCmd :\u003D exec.Command(\"bash\", \"-c\", \"ls -a -l -h\")\u000A lsOut, err :\u003D lsCmd.Output()\u000A if err !\u003D nil {\u000A panic(err)\u000A }\u000A fmt.Println(\"\u003E ls -a -l -h\")\u000A fmt.Println(string(lsOut))\u000A}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"io\"\u000A \"os/exec\"\u000A)\u000A');codeLines.push('func main() {\u000A');codeLines.push(' dateCmd :\u003D exec.Command(\"date\")\u000A');codeLines.push(' dateOut, err :\u003D dateCmd.Output()\u000A if err !\u003D nil {\u000A panic(err)\u000A }\u000A fmt.Println(\"\u003E date\")\u000A fmt.Println(string(dateOut))\u000A');codeLines.push(' grepCmd :\u003D exec.Command(\"grep\", \"hello\")\u000A');codeLines.push(' grepIn, _ :\u003D grepCmd.StdinPipe()\u000A grepOut, _ :\u003D grepCmd.StdoutPipe()\u000A grepCmd.Start()\u000A grepIn.Write([]byte(\"hello grep\\ngoodbye grep\"))\u000A grepIn.Close()\u000A grepBytes, _ :\u003D io.ReadAll(grepOut)\u000A grepCmd.Wait()\u000A');codeLines.push(' fmt.Println(\"\u003E grep hello\")\u000A fmt.Println(string(grepBytes))\u000A');codeLines.push(' lsCmd :\u003D exec.Command(\"bash\", \"-c\", \"ls -a -l -h\")\u000A lsOut, err :\u003D lsCmd.Output()\u000A if err !\u003D nil {\u000A panic(err)\u000A }\u000A fmt.Println(\"\u003E ls -a -l -h\")\u000A fmt.Println(string(lsOut))\u000A}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
21
public/temporary-files-and-directories
generated
21
public/temporary-files-and-directories
generated
@ -45,7 +45,7 @@ time.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/nMpjCsALS6P"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/hVcPg9RH3_V"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -59,7 +59,6 @@ time.</p>
|
||||
|
||||
<pre class="chroma"><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="s">"fmt"</span>
|
||||
<span class="s">"io/ioutil"</span>
|
||||
<span class="s">"os"</span>
|
||||
<span class="s">"path/filepath"</span>
|
||||
<span class="p">)</span>
|
||||
@ -96,16 +95,16 @@ time.</p>
|
||||
<tr>
|
||||
<td class="docs">
|
||||
<p>The easiest way to create a temporary file is by
|
||||
calling <code>ioutil.TempFile</code>. It creates a file <em>and</em>
|
||||
calling <code>os.CreateTemp</code>. It creates a file <em>and</em>
|
||||
opens it for reading and writing. We provide <code>""</code>
|
||||
as the first argument, so <code>ioutil.TempFile</code> will
|
||||
as the first argument, so <code>os.CreateTemp</code> will
|
||||
create the file in the default location for our OS.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">f</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">TempFile</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="s">"sample"</span><span class="p">)</span>
|
||||
<span class="nx">f</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">CreateTemp</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="s">"sample"</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -116,7 +115,7 @@ create the file in the default location for our OS.</p>
|
||||
<p>Display the name of the temporary file. On
|
||||
Unix-based OSes the directory will likely be <code>/tmp</code>.
|
||||
The file name starts with the prefix given as the
|
||||
second argument to <code>ioutil.TempFile</code> and the rest
|
||||
second argument to <code>os.CreateTemp</code> and the rest
|
||||
is chosen automatically to ensure that concurrent
|
||||
calls will always create different file names.</p>
|
||||
|
||||
@ -163,15 +162,15 @@ explicitly.</p>
|
||||
<td class="docs">
|
||||
<p>If we intend to write many temporary files, we may
|
||||
prefer to create a temporary <em>directory</em>.
|
||||
<code>ioutil.TempDir</code>’s arguments are the same as
|
||||
<code>TempFile</code>’s, but it returns a directory <em>name</em>
|
||||
<code>os.MkdirTemp</code>’s arguments are the same as
|
||||
<code>CreateTemp</code>’s, but it returns a directory <em>name</em>
|
||||
rather than an open file.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">dname</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">TempDir</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="s">"sampledir"</span><span class="p">)</span>
|
||||
<span class="nx">dname</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">MkdirTemp</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="s">"sampledir"</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"Temp dir name:"</span><span class="p">,</span> <span class="nx">dname</span><span class="p">)</span>
|
||||
</pre>
|
||||
@ -199,7 +198,7 @@ prefixing them with our temporary directory.</p>
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">fname</span> <span class="o">:=</span> <span class="nx">filepath</span><span class="p">.</span><span class="nf">Join</span><span class="p">(</span><span class="nx">dname</span><span class="p">,</span> <span class="s">"file1"</span><span class="p">)</span>
|
||||
<span class="nx">err</span> <span class="p">=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="nx">fname</span><span class="p">,</span> <span class="p">[]</span><span class="kt">byte</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">},</span> <span class="mo">0666</span><span class="p">)</span>
|
||||
<span class="nx">err</span> <span class="p">=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="nx">fname</span><span class="p">,</span> <span class="p">[]</span><span class="kt">byte</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">},</span> <span class="mo">0666</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
</pre>
|
||||
@ -235,7 +234,7 @@ prefixing them with our temporary directory.</p>
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"io/ioutil\"\u000A \"os\"\u000A \"path/filepath\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' f, err :\u003D ioutil.TempFile(\"\", \"sample\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Temp file name:\", f.Name())\u000A');codeLines.push(' defer os.Remove(f.Name())\u000A');codeLines.push(' _, err \u003D f.Write([]byte{1, 2, 3, 4})\u000A check(err)\u000A');codeLines.push(' dname, err :\u003D ioutil.TempDir(\"\", \"sampledir\")\u000A check(err)\u000A fmt.Println(\"Temp dir name:\", dname)\u000A');codeLines.push(' defer os.RemoveAll(dname)\u000A');codeLines.push(' fname :\u003D filepath.Join(dname, \"file1\")\u000A err \u003D ioutil.WriteFile(fname, []byte{1, 2}, 0666)\u000A check(err)\u000A}\u000A');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"fmt\"\u000A \"os\"\u000A \"path/filepath\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' f, err :\u003D os.CreateTemp(\"\", \"sample\")\u000A check(err)\u000A');codeLines.push(' fmt.Println(\"Temp file name:\", f.Name())\u000A');codeLines.push(' defer os.Remove(f.Name())\u000A');codeLines.push(' _, err \u003D f.Write([]byte{1, 2, 3, 4})\u000A check(err)\u000A');codeLines.push(' dname, err :\u003D os.MkdirTemp(\"\", \"sampledir\")\u000A check(err)\u000A fmt.Println(\"Temp dir name:\", dname)\u000A');codeLines.push(' defer os.RemoveAll(dname)\u000A');codeLines.push(' fname :\u003D filepath.Join(dname, \"file1\")\u000A err \u003D os.WriteFile(fname, []byte{1, 2}, 0666)\u000A check(err)\u000A}\u000A');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
7
public/writing-files
generated
7
public/writing-files
generated
@ -42,7 +42,7 @@ ones we saw earlier for reading.</p>
|
||||
|
||||
</td>
|
||||
<td class="code leading">
|
||||
<a href="http://play.golang.org/p/fQ7sd4gXv0F"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<a href="http://play.golang.org/p/Y12O-L_zFS1"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
||||
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -57,7 +57,6 @@ ones we saw earlier for reading.</p>
|
||||
<pre class="chroma"><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="s">"bufio"</span>
|
||||
<span class="s">"fmt"</span>
|
||||
<span class="s">"io/ioutil"</span>
|
||||
<span class="s">"os"</span>
|
||||
<span class="p">)</span>
|
||||
</pre>
|
||||
@ -100,7 +99,7 @@ bytes) into a file.</p>
|
||||
|
||||
<pre class="chroma">
|
||||
<span class="nx">d1</span> <span class="o">:=</span> <span class="p">[]</span><span class="nb">byte</span><span class="p">(</span><span class="s">"hello\ngo\n"</span><span class="p">)</span>
|
||||
<span class="nx">err</span> <span class="o">:=</span> <span class="nx">ioutil</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="s">"/tmp/dat1"</span><span class="p">,</span> <span class="nx">d1</span><span class="p">,</span> <span class="mo">0644</span><span class="p">)</span>
|
||||
<span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">WriteFile</span><span class="p">(</span><span class="s">"/tmp/dat1"</span><span class="p">,</span> <span class="nx">d1</span><span class="p">,</span> <span class="mo">0644</span><span class="p">)</span>
|
||||
<span class="nf">check</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
|
||||
</pre>
|
||||
</td>
|
||||
@ -282,7 +281,7 @@ we’ve just seen to the <code>stdin</code> and <code>stdout</code> streams.
|
||||
</div>
|
||||
<script>
|
||||
var codeLines = [];
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"bufio\"\u000A \"fmt\"\u000A \"io/ioutil\"\u000A \"os\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' d1 :\u003D []byte(\"hello\\ngo\\n\")\u000A err :\u003D ioutil.WriteFile(\"/tmp/dat1\", d1, 0644)\u000A check(err)\u000A');codeLines.push(' f, err :\u003D os.Create(\"/tmp/dat2\")\u000A check(err)\u000A');codeLines.push(' defer f.Close()\u000A');codeLines.push(' d2 :\u003D []byte{115, 111, 109, 101, 10}\u000A n2, err :\u003D f.Write(d2)\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n2)\u000A');codeLines.push(' n3, err :\u003D f.WriteString(\"writes\\n\")\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n3)\u000A');codeLines.push(' f.Sync()\u000A');codeLines.push(' w :\u003D bufio.NewWriter(f)\u000A n4, err :\u003D w.WriteString(\"buffered\\n\")\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n4)\u000A');codeLines.push(' w.Flush()\u000A');codeLines.push('}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');
|
||||
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import (\u000A \"bufio\"\u000A \"fmt\"\u000A \"os\"\u000A)\u000A');codeLines.push('func check(e error) {\u000A if e !\u003D nil {\u000A panic(e)\u000A }\u000A}\u000A');codeLines.push('func main() {\u000A');codeLines.push(' d1 :\u003D []byte(\"hello\\ngo\\n\")\u000A err :\u003D os.WriteFile(\"/tmp/dat1\", d1, 0644)\u000A check(err)\u000A');codeLines.push(' f, err :\u003D os.Create(\"/tmp/dat2\")\u000A check(err)\u000A');codeLines.push(' defer f.Close()\u000A');codeLines.push(' d2 :\u003D []byte{115, 111, 109, 101, 10}\u000A n2, err :\u003D f.Write(d2)\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n2)\u000A');codeLines.push(' n3, err :\u003D f.WriteString(\"writes\\n\")\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n3)\u000A');codeLines.push(' f.Sync()\u000A');codeLines.push(' w :\u003D bufio.NewWriter(f)\u000A n4, err :\u003D w.WriteString(\"buffered\\n\")\u000A check(err)\u000A fmt.Printf(\"wrote %d bytes\\n\", n4)\u000A');codeLines.push(' w.Flush()\u000A');codeLines.push('}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');
|
||||
</script>
|
||||
<script src="site.js" async></script>
|
||||
</body>
|
||||
|
@ -4,11 +4,7 @@ import (
|
||||
"bytes"
|
||||
"crypto/sha1"
|
||||
"fmt"
|
||||
"github.com/alecthomas/chroma"
|
||||
"github.com/alecthomas/chroma/formatters/html"
|
||||
"github.com/alecthomas/chroma/lexers"
|
||||
"github.com/alecthomas/chroma/styles"
|
||||
"io/ioutil"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
@ -17,6 +13,11 @@ import (
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/alecthomas/chroma"
|
||||
"github.com/alecthomas/chroma/formatters/html"
|
||||
"github.com/alecthomas/chroma/lexers"
|
||||
"github.com/alecthomas/chroma/styles"
|
||||
|
||||
"github.com/russross/blackfriday/v2"
|
||||
)
|
||||
|
||||
@ -41,9 +42,9 @@ func ensureDir(dir string) {
|
||||
}
|
||||
|
||||
func copyFile(src, dst string) {
|
||||
dat, err := ioutil.ReadFile(src)
|
||||
dat, err := os.ReadFile(src)
|
||||
check(err)
|
||||
err = ioutil.WriteFile(dst, dat, 0644)
|
||||
err = os.WriteFile(dst, dat, 0644)
|
||||
check(err)
|
||||
}
|
||||
|
||||
@ -59,7 +60,7 @@ func pipe(bin string, arg []string, src string) []byte {
|
||||
check(err)
|
||||
err = in.Close()
|
||||
check(err)
|
||||
bytes, err := ioutil.ReadAll(out)
|
||||
bytes, err := io.ReadAll(out)
|
||||
check(err)
|
||||
err = cmd.Wait()
|
||||
check(err)
|
||||
@ -74,7 +75,7 @@ func sha1Sum(s string) string {
|
||||
}
|
||||
|
||||
func mustReadFile(path string) string {
|
||||
bytes, err := ioutil.ReadFile(path)
|
||||
bytes, err := os.ReadFile(path)
|
||||
check(err)
|
||||
return string(bytes)
|
||||
}
|
||||
@ -141,11 +142,11 @@ func resetURLHashFile(codehash, code, sourcePath string) string {
|
||||
resp, err := http.Post("https://play.golang.org/share", "text/plain", payload)
|
||||
check(err)
|
||||
defer resp.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
check(err)
|
||||
urlkey := string(body)
|
||||
data := fmt.Sprintf("%s\n%s\n", codehash, urlkey)
|
||||
ioutil.WriteFile(sourcePath, []byte(data), 0644)
|
||||
os.WriteFile(sourcePath, []byte(data), 0644)
|
||||
return urlkey
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
@ -17,7 +16,7 @@ func check(err error) {
|
||||
}
|
||||
|
||||
func readLines(path string) []string {
|
||||
srcBytes, err := ioutil.ReadFile(path)
|
||||
srcBytes, err := os.ReadFile(path)
|
||||
check(err)
|
||||
return strings.Split(string(srcBytes), "\n")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user