企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] <br> <br> >[success] ## **1:写文件实例操作** ### **1:基本介绍** ``` func OpenFile(name [string](string), flag [int](int), perm [FileMode](FileMode) (file *[File](File), err [error](error)) ``` **说明**: os.OpenFile是\-一个更一般性的文件打开函数,它会使用指定的选项(如 O_RDONLY等) 、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返 回的文件对象可用于I/0。如果出错,错误底层类型是\*PathError. <br> **OpenFile参数说明:** 1,name   string:要打开的文件路径 2,flag     int :文件的打开模式(可以组合) 3,perm FileMode:文件是什么权限控制的 <br> **第二个参数**:文件打开模式;如下 const (     O\_RDONLY int = syscall.O\_RDONLY // 只读模式打开文件     O\_WRONLY int = syscall.O\_WRONLY // 只写模式打开文件     O\_RDWR   int = syscall.O\_RDWR   // 读写模式打开文件     O\_APPEND int = syscall.O\_APPEND // 写操作时将数据附加到文件尾部     O\_CREATE int = syscall.O\_CREAT  // 如果不存在将创建一个新文件     O\_EXCL   int = syscall.O\_EXCL   // 和O\_CREATE配合使用,文件必须不存在     O\_SYNC   int = syscall.O\_SYNC   // 打开文件用于同步I/O     O\_TRUNC  int = syscall.O\_TRUNC  // 如果可能,打开时清空文件 ) **第三个参数**:打开文件权限 注意:FileMode在windows下是不管用,只有在liunx或unix下面才管用 ![](https://img.kancloud.cn/62/9a/629a2c2503b25d2f34f67a4b29b0a7d6_988x720.png) <br> <br> >[success] ## **2:写文件方式一** 1)**创建一个新文件,写入内容5句**"hello, Gardon" ![](https://img.kancloud.cn/a2/b3/a2b352a37ebf95094611e08eb9c9c011_981x720.png) <br> 2)打开一个存在的文件中,**将原来的内容覆盖成新的内容**10句"jeson 要挺住!" ![](https://img.kancloud.cn/ba/9a/ba9a33fbc0c838dc9e97e57e07437d20_1183x720.png) <br> 3)打开一个存在的文件,在原来的内容**追加内容**'ABC! ENGLISH!' 例如日志 ![](https://img.kancloud.cn/f4/ee/f4ee8f938cb8b1d7d2db987ddc1202ad_1102x720.png) <br> 4)打开一个存在的文件,将原来的内容读出显示在终端,并且追加3句话" ![](https://img.kancloud.cn/20/8b/208b02b24b9f7fd6f769dc758172b447_744x720.png) 使用os.OpenFile(), bufio.NewWriter(), \*Writer的方法WriteString完成上面的任务,**带缓冲方法** <br> <br> >[success] ## **3:写文件方式二** 案例如下: 编程一个程序,将一个文件的内容,写入到另外一个文件。注:这两个文件已经存在了 >:将src/Go\_project/Open/bufiotest文件中的内容写入 src/Go\_project/Open/bufiotest2 说明: 1)使用ioutil.ReadFile / ioutil.WriteFile完成写文件的任务. ![](https://img.kancloud.cn/3a/43/3a43a45763e8d30150075e490e31e5c0_1272x720.png) <br> <br> >[success] ## **4:判断文件是否存在** golang判断文件或文件夹是否存在的方法为使用**os.Stat()**函数返回的错误值进行判断: 1)如果返回的错误为nil,说明文件或文件夹存在 2)如果返回的错误类型使用**os.IsNotExist()**判断为true,说明文件或文件夹不存在 3)如果返回的错误为其它类型,则不确定是否在存在 ![](https://img.kancloud.cn/75/11/75114ddb9993512afb806e29e19c086d_1280x237.png) ![](https://img.kancloud.cn/69/65/6965b4791fc784c1632628df943476e5_1280x233.png) <br> <br> >[success] ## **5:文件拷贝** ![](https://img.kancloud.cn/86/80/868059210529508c9468b4b11b7cf105_1280x351.png) **注意:** copy函数是io包实现的 ![](https://img.kancloud.cn/ba/f7/baf713fbfd6f0d841c0a5be0b71f11d4_775x720.png) <br> <br> >[success] ## **6:文件统计** 说明:统计一个文件中含有的英文、数字、空格及其它字符数量。 ![](https://img.kancloud.cn/be/4d/be4d9e12abf7fb54a7c10f7995e411e4_997x720.png) ![](https://img.kancloud.cn/d9/41/d941fe914ac725d53379338ffe412bf8_1280x619.png) <br> <br> >[success] ## **7:flag命令解析** ### **1:基本介绍** ``` [func StringVar(p *string, name string, value string, usage string)](StringVar) ``` ![](https://img.kancloud.cn/ba/e2/bae282f3b251c1dabf5c5f17cbf2b219_1280x237.png) ![](https://img.kancloud.cn/d8/bf/d8bf636d1b2a57f95b49cb1cda3ff60d_1280x253.png) ![](https://img.kancloud.cn/31/f0/31f0ceade42961262e1dcd8af2f7d87c_1280x247.png) 主要是来获取终端的参数命令,例如mysql的登录 mysql -u root -p 3306 -h127.0.0.1 flag包就是来获取\-u 和 \-p -h后面的参数,而且使用flag包,不需要按照固定死的写法来写,我们可以将key value的前后顺序打乱,例如:mysql -p 3306 -u root ........ ### **2:案例演示** ![](https://img.kancloud.cn/7a/04/7a043819aa6ae24a1921add9a3f92ec0_1280x586.png) 命令行参数使用提示: ![](https://img.kancloud.cn/4d/70/4d7009e01445334b92b2ae5249a6943e_1280x374.png) <br> <br> >[success] ## 8:json(JavaScript Object Notation) ### **1:json基本介绍** JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。key-val JSON是在2001年开始推广使用的数据格式,目前已经成为主流的数据格式。 JSON易于机器解析和生成,并有效地提升**网络传输效率**,通常程序在网络传输时会先将**数据(结构体、map等)序列化成json字符串到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等)** 这种方式已然成为各个语言的标准。 ![](https://img.kancloud.cn/5b/ad/5bad5dcf7ba0dd8229b17fd18590688e_1280x497.png) ### **2:json数据格式** 在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等. JSON键值对是用来保存数据一种方式, 键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值: ``` {     "code":1,     "msg":"success",     "data":{         "name":"pig",         "age":"18",         "sex":"man",         "hometown":{             "province":"江西省",             "city":"抚州市",             "county":"崇仁县"         }     } } ``` ### **3:Marshal()与unmarshal** Json Marshal:将数据编码成json字符串(序列化) Json Unmarshal:将json字符串解码到相应的数据结构(反序列化) **应用实例如下**: ![](https://img.kancloud.cn/0c/59/0c59ae077c44af12f041e26aa154560b_1280x353.png) ![](https://img.kancloud.cn/94/88/94885bf56f65ad759df044755bd7944a_1280x302.png) ![](https://img.kancloud.cn/f4/6a/f46ac35c557714926a39c144590b41f5_909x720.png) <br> <br> ### **4:使用json tag指定字段名** 序列化与反序列化默认情况下使用结构体的字段名,我们可以通过给结构体字段添加tag来指定json序列化生成的字段名 案例如下: ![](https://img.kancloud.cn/bb/a8/bba83a03a7561ba64dfb65e7e5cce757_1280x250.png) ### **5:json的序列化** json序列化是指,将有**key-value** 结构的数据类型(比如结构体、map、切片)序列化成json字符串 这里我们介绍一下**结构**体,**map**和**切片**的序列化 **序列化方法:官网解释如下:** **func [Marshal]** **func Marshal(v interface{}) (\[\]byte, error)** Marshal函数返回v的json编码。 Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。 否则,Marshal函数使用下面的基于类型的默认编码格式: 布尔类型编码为json布尔类型。 浮点数、整数和Number类型的值编码为json数字类型。 字符串编码为json字符串。角括号""会转义为"\\u003c"和"\\u003e"以避免某些浏览器吧json输出错误理解为HTML。基于同样的原因,"&"转义为"\\u0026"。 数组和切片类型的值编码为json数组,但\[\]byte编码为base64编码字符串,nil切片编码为null。 结构体的值编码为json对象。每一个导出字段变成该对象的一个成员。 * [ ] 自己解释:Marshal方法接受一个interface,而我们在学方法时曾说过,接受类型是**interface可以接受任何数据类型**,Marshal方法返回两个参数,**一个byte切片,一个error报错** * [ ] **注意:Marshal内部会做一个判断,如果该v中的字段可以用则序列化,不可以用(例如小写)则不取出--------Marshal内部有反射机制** **5.1:结构体序列化:** ![](https://img.kancloud.cn/47/5d/475d432f1c73d126e584fc60bf858e4e_1280x709.png) **5.2:map序列化** ![](https://img.kancloud.cn/41/b6/41b687a7d8caa82b9238d17753e8d2ea_1280x465.png) **5.3:Slice序列化** ![](https://img.kancloud.cn/9a/6c/9a6c9d51e3681465169a9205529d3c10_1022x720.png)