Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
ad92643e
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ad92643e
编写于
10月 07, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
5d3d6030
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
497 addition
and
119 deletion
+497
-119
blog/golang/golang-standard-bufio.md
blog/golang/golang-standard-bufio.md
+72
-0
blog/golang/golang-standard-builtin.md
blog/golang/golang-standard-builtin.md
+1
-0
blog/golang/golang-standard-io.md
blog/golang/golang-standard-io.md
+115
-0
blog/golang/golang-standard-ioutil.md
blog/golang/golang-standard-ioutil.md
+160
-0
blog/golang/golang-standard-log.md
blog/golang/golang-standard-log.md
+140
-0
blog/golang/golang-standard-os.md
blog/golang/golang-standard-os.md
+1
-117
blog/golang/index.md
blog/golang/index.md
+8
-2
未找到文件。
blog/golang/golang-standard-bufio.md
0 → 100644
浏览文件 @
ad92643e
# Golang标准库-bufio
bufio库实现了有缓冲的I/O
读示例
```
go
package
main
import
(
"bufio"
"fmt"
"strings"
)
func
main
()
{
reader
:=
strings
.
NewReader
(
"hello world"
)
bufReader
:=
bufio
.
NewReader
(
reader
)
s
,
_
:=
bufReader
.
ReadString
(
'\n'
)
fmt
.
Printf
(
"s: %v
\n
"
,
s
)
// s: hello world
}
```
写示例
```
go
package
main
import
(
"bufio"
"os"
)
func
main
()
{
f
,
_
:=
os
.
OpenFile
(
"demo.txt"
,
os
.
O_RDWR
,
0777
)
defer
f
.
Close
()
w
:=
bufio
.
NewWriter
(
f
)
w
.
WriteString
(
"hello"
)
w
.
Flush
()
}
```
Scanner 示例
```
go
package
main
import
(
"bufio"
"fmt"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"AAA BBB CCC"
)
s
:=
bufio
.
NewScanner
(
r
)
s
.
Split
(
bufio
.
ScanWords
)
for
s
.
Scan
()
{
fmt
.
Printf
(
"s.Text(): %v
\n
"
,
s
.
Text
())
}
// s.Text(): AAA
// s.Text(): BBB
// s.Text(): CCC
}
```
blog/golang/golang-standard-builtin.md
0 → 100644
浏览文件 @
ad92643e
# Golang标准库-builtin
blog/golang/golang-standard-io.md
0 → 100644
浏览文件 @
ad92643e
# Golang标准库-io输入输出
io包封装了如下操作
-
io 为IO原语操作(I/O primitives)提供基本的接口 os、File、Reader、Writer
-
io/ioutil 封装了一些实用函数
-
fmt 实现了格式化I/O,类似C语言中的printf 和 scanf
-
bufio 实现带缓冲的I/O
基本的IO接口
```
go
type
Reader
interface
{
Read
(
p
[]
byte
)
(
n
int
,
err
error
)
}
type
Writer
interface
{
Write
(
p
[]
byte
)
(
n
int
,
err
error
)
}
```
以下类型实现了Reader和Writer接口
```
go
os
.
File
(
Reader和Writer
)
strings
.
Reader
(
Reader
)
bufio
.
Reader
(
Reader
)
bufio
.
Writer
(
Writer
)
bytes
.
Buffer
(
Reader和Writer
)
bytes
.
Reader
(
Reader
)
compress
/
gzip
.
Reader
(
Reader
)
compress
/
gzip
.
Writer
(
Writer
)
crypto
/
cipher
.
StreamReader
(
Reader
)
crypto
/
cipher
.
StreamWriter
(
Writer
)
crypto
/
tls
.
Conn
(
Reader和Writer
)
encoding
/
csv
.
Reader
(
Reader
)
encoding
/
csv
.
Writer
(
Writer
)
```
示例
```
go
package
main
import
(
"fmt"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
buf
:=
make
([]
byte
,
5
)
n
,
err
:=
r
.
Read
(
buf
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
else
{
fmt
.
Printf
(
"n: %v
\n
"
,
n
)
// n: 5
fmt
.
Printf
(
"buf: %v
\n
"
,
string
(
buf
))
// buf: Hello
}
}
```
reader拷贝到writer
```
go
package
main
import
(
"fmt"
"io"
"os"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
// 复制到标准输出流,实际效果为:打印到控制台
_
,
err
:=
io
.
Copy
(
os
.
Stdout
,
r
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
// Hello world
}
```
带缓冲区的拷贝
```
go
package
main
import
(
"fmt"
"io"
"os"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
buf
:=
make
([]
byte
,
8
)
_
,
err
:=
io
.
CopyBuffer
(
os
.
Stdout
,
r
,
buf
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
// Hello world
}
```
blog/golang/golang-standard-ioutil.md
0 → 100644
浏览文件 @
ad92643e
# Golang标准库-ioutil
| 函数名 | 作用
| - | -
| ReadAll | 读取数据,返回读到的字节slice
| ReadDir | 读取一个目录,返回目录入口数组 []os.FileInfo
| ReadFile | 读取文件,返回文件内容(字节slice)
| WriteFile| 根据文件路径,写入字节slice
| TempDir| 在一个目录中创建指定前缀名的临时目录,返回新临时目录的路径
| TempFile| 在一个目录中创建指定前缀名的临时文件,返回os.File
示例
```
go
package
main
import
(
"fmt"
"io/ioutil"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
b
,
err
:=
ioutil
.
ReadAll
(
r
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
else
{
fmt
.
Printf
(
"string(b): %v
\n
"
,
string
(
b
))
// string(b): Hello world
}
}
```
从文件中读取
```
go
package
main
import
(
"fmt"
"io/ioutil"
"os"
)
func
main
()
{
f
,
_
:=
os
.
Open
(
"demo.txt"
)
defer
f
.
Close
()
b
,
err
:=
ioutil
.
ReadAll
(
f
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
else
{
fmt
.
Printf
(
"string(b): %v
\n
"
,
string
(
b
))
// string(b): Hello world
}
}
```
读取当前目录下所有文件
```
go
package
main
import
(
"fmt"
"io/ioutil"
)
func
main
()
{
fi
,
_
:=
ioutil
.
ReadDir
(
"."
)
for
_
,
v
:=
range
fi
{
fmt
.
Printf
(
"v.Name(): %v
\n
"
,
v
.
Name
())
}
}
```
读取文件
```
go
package
main
import
(
"fmt"
"io/ioutil"
)
func
main
()
{
b
,
_
:=
ioutil
.
ReadFile
(
"demo.txt"
)
fmt
.
Printf
(
"string(b): %v
\n
"
,
string
(
b
))
}
```
写入文件内容
```
go
package
main
import
(
"io/ioutil"
)
func
main
()
{
ioutil
.
WriteFile
(
"demo.txt"
,
[]
byte
(
"hello"
),
0644
)
}
```
临时文件
```
go
package
main
import
(
"io/ioutil"
"log"
"os"
)
func
main
()
{
// 创建临时文件
tempfile
,
err
:=
ioutil
.
TempFile
(
""
,
"temp"
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
// 函数结束移除临时文件
defer
os
.
Remove
(
tempfile
.
Name
())
// clean up
// 向临时文件写入字节数组
content
:=
[]
byte
(
"hello world"
)
if
_
,
err
:=
tempfile
.
Write
(
content
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
if
err
:=
tempfile
.
Close
();
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
```
\ No newline at end of file
blog/golang/golang-standard-log.md
0 → 100644
浏览文件 @
ad92643e
# Golang标准库-log
log包,实现了简单的日志服务
log包中有3个系列的日志打印函数
函数系列 | 作用
-
| -
print | 单纯的打印日志
panic | 打印日志,抛出panic异常
fatal | 打印日志,强制结束程序
`os.Exit(1)`
,
`defer`
函数不会执行
Print 示例
```
go
package
main
import
(
"log"
)
func
main
()
{
log
.
Print
(
"Hello"
)
// 2022/10/07 15:24:38 Hello
log
.
Println
(
"Hello"
)
// 2022/10/07 15:25:08 Hello\n
log
.
Printf
(
"Hello %d"
,
20
)
// 2022/10/07 15:25:08 Hello 20
}
```
Panic 示例
```
go
package
main
import
(
"fmt"
"log"
)
func
main
()
{
defer
fmt
.
Println
(
"defer"
)
log
.
Panic
(
"Hello"
)
fmt
.
Println
(
"after Panic"
)
// 2022/10/07 15:27:10 Hello
// defer
// panic: Hello
}
```
Fatal 示例
```
go
package
main
import
(
"fmt"
"log"
)
func
main
()
{
defer
fmt
.
Println
(
"defer"
)
log
.
Fatal
(
"Hello"
)
fmt
.
Println
(
"after Panic"
)
// 2022/10/07 15:28:48 Hello
// exit status 1
}
```
log配置
```
go
package
main
import
(
"log"
"os"
)
func
init
()
{
// 输出格式 长日期 长时间 短文件名
log
.
SetFlags
(
log
.
Ldate
|
log
.
Ltime
|
log
.
Lshortfile
)
// 设置前缀
log
.
SetPrefix
(
"main: "
)
// 设置日志输出文件
f
,
err
:=
os
.
OpenFile
(
"demo.log"
,
os
.
O_WRONLY
|
os
.
O_APPEND
|
os
.
O_CREATE
,
0664
)
// defer f.Close()
if
err
!=
nil
{
log
.
Fatal
(
"日志文件打开错误"
)
}
log
.
SetOutput
(
f
)
}
func
main
()
{
log
.
Print
(
"Hello"
)
// main: 2022/10/07 15:35:13 main.go:16: Hello
}
```
自定义logger
```
go
package
main
import
(
"log"
"os"
)
var
logger
*
log
.
Logger
func
init
()
{
// func New(out io.Writer, prefix string, flag int) *Logger
logger
=
log
.
New
(
os
.
Stdout
,
"main: "
,
log
.
Ldate
|
log
.
Ltime
|
log
.
Lshortfile
)
}
func
main
()
{
logger
.
Print
(
"Hello"
)
// main: 2022/10/07 15:35:13 main.go:16: Hello
}
```
\ No newline at end of file
blog/golang/golang-standard.md
→
blog/golang/golang-standard
-os
.md
浏览文件 @
ad92643e
#
第二十一章 Golang标准库
#
Golang标准库-os
标准库文档:https://pkg.go.dev/std
...
...
@@ -509,119 +509,3 @@ func main() {
}
```
## io模块-输入输出
io包封装了如下操作
-
io 为IO原语操作(I/O primitives)提供基本的接口 os、File、Reader、Writer
-
io/ioutil 封装了一些实用函数
-
fmt 实现了格式化I/O,类似C语言中的printf 和 scanf
-
bufio 实现带缓冲的I/O
基本的IO接口
```
go
type
Reader
interface
{
Read
(
p
[]
byte
)
(
n
int
,
err
error
)
}
type
Writer
interface
{
Write
(
p
[]
byte
)
(
n
int
,
err
error
)
}
```
以下类型实现了Reader和Writer接口
```
go
os
.
File
(
Reader和Writer
)
strings
.
Reader
(
Reader
)
bufio
.
Reader
(
Reader
)
bufio
.
Writer
(
Writer
)
bytes
.
Buffer
(
Reader和Writer
)
bytes
.
Reader
(
Reader
)
compress
/
gzip
.
Reader
(
Reader
)
compress
/
gzip
.
Writer
(
Writer
)
crypto
/
cipher
.
StreamReader
(
Reader
)
crypto
/
cipher
.
StreamWriter
(
Writer
)
crypto
/
tls
.
Conn
(
Reader和Writer
)
encoding
/
csv
.
Reader
(
Reader
)
encoding
/
csv
.
Writer
(
Writer
)
```
示例
```
go
package
main
import
(
"fmt"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
buf
:=
make
([]
byte
,
5
)
n
,
err
:=
r
.
Read
(
buf
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
else
{
fmt
.
Printf
(
"n: %v
\n
"
,
n
)
// n: 5
fmt
.
Printf
(
"buf: %v
\n
"
,
string
(
buf
))
// buf: Hello
}
}
```
reader拷贝到writer
```
go
package
main
import
(
"fmt"
"io"
"os"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
// 复制到标准输出流,实际效果为:打印到控制台
_
,
err
:=
io
.
Copy
(
os
.
Stdout
,
r
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
// Hello world
}
```
带缓冲区的拷贝
```
go
package
main
import
(
"fmt"
"io"
"os"
"strings"
)
func
main
()
{
r
:=
strings
.
NewReader
(
"Hello world"
)
buf
:=
make
([]
byte
,
8
)
_
,
err
:=
io
.
CopyBuffer
(
os
.
Stdout
,
r
,
buf
)
if
err
!=
nil
{
fmt
.
Printf
(
"err: %v
\n
"
,
err
)
}
// Hello world
}
```
\ No newline at end of file
blog/golang/index.md
浏览文件 @
ad92643e
...
...
@@ -48,10 +48,16 @@
[
第二十章 Golang 并发编程
](
/blog/golang/golang-concurrency.md
)
[
第二十一章 Golang标准库
](
/blog/golang/golang-standard.md
)
第二十一章 Golang标准库
-
[
Golang标准库-os
](
/blog/golang/golang-standard-os.md
)
-
[
Golang标准库-io输入输出
](
/blog/golang/golang-standard-io.md
)
-
[
Golang标准库-ioutil
](
/blog/golang/golang-standard-ioutil.md
)
-
[
Golang标准库-bufio
](
/blog/golang/golang-standard-bufio.md
)
-
[
Golang标准库-log
](
/blog/golang/golang-standard-log.md
)
-
[
Golang标准库-builtin
](
/blog/golang/golang-standard-builtin.md
)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=84&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=89&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录