# Go学习-Day7

news/2025/2/19 8:33:15/

文章目录

    • 断言
    • 文件
      • 打开/关闭文件
      • 读取文件
      • 写入文件
    • 命令行参数解析
      • Args
      • flag包
    • JSON

  • 个人博客:CSDN博客

断言

type Node struct {x inty int
}func main() {var a interface{}var n Node = Node{1, 2}a = nvar b Nodeb = a.(Node)fmt.Println(b)
}
  • 此处我们有一个结构体n给空接口a赋值(空接口没有方法,相当于方法被n给完全实现,所以是可以赋值给接口的),然后我们想把接口赋值给具体的结构体对象,但是,这里会报错,需要使用类型断言的语法。用.(类型)类声明a的类型。

  • 类型断言之后,编译器会判断这个变量是否是指向这个类型,如果是,就转换成这个类型来赋值

  • 就是把抽象的接口转换成具体的类型的方法

  • 如果类型不匹配的话,就会报panic,通过这个方法,可以判断接口个具体类型,执行特定操作

  • if a, flag := u.(xxx); flag == true {xxxx
    } 
    
  • x.(type)会返回类型

文件

打开/关闭文件

import ("fmt""os"
)func main() {f, err := os.Open("E:\\JetBrains\\GoLandSpace\\src\\go_code\\project01\\main\\test.txt")if err != nil {fmt.Println(err)}fmt.Printf("%v", f)err = f.Close()if err != nil {fmt.Println(err)}
}
//返回&{0xc00010c780}
  • 先用os包打开文件,再用方法关闭,上面的绝对路径当中,如果用正斜杠要双写,反斜杠就不用

读取文件

  • import ("bufio""fmt""io""os"
    )func main() {f, err := os.Open("E:/JetBrains/GoLandSpace/src/go_code/project01/main/test.txt")if err != nil {fmt.Println(err)}defer f.Close() //函数推出的时候自动关闭reader := bufio.NewReader(f) //创建一个缓冲区来读入for {str, err := reader.ReadString('\n') //读到换行符就停止if err == io.EOF {break //读到末尾}fmt.Println(str)}fmt.Println("-------------------")
    }
    
  • 首先打开文件,然后按行读取,注意读到EOF要结束死循环

  • ioutil.ReadFile可以一次性读入到一个字节数组内,不过文件需要比较小的情况下使用

写入文件

import ("bufio""fmt""os"
)func main() {filePath := "E:/JetBrains/GoLandSpace/src/go_code/project01/main/a.txt"file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)//后面那个int在windows下无用if err != nil {fmt.Printf("%v", err)return}defer file.Close()str := "ok\n"writer := bufio.NewWriter(file)writer.WriteString(str)writer.Flush() //从缓冲区压入文件}
  • 写入文件的流程也是非常亲切
  • 我们写入写入缓冲区之后,我们必须要flush刷新一下缓冲区,将缓冲区内的字符刷到磁盘上
  • 通过不同的标识符,有追加,截断清除的写入操作
  • 类似的可以拷贝文件,有io.Copy()函数可以更方便地拷贝文件

命令行参数解析

Args

  • os.Args这是go的命令行参数的数组,但是不方便

flag包

flag.StringVar(&xxx, "x", "", "sss")
//第一个变量是传入的值所存的变量的地址,"x"是传入的参数的名字,""是默认值, "sss"是说明
  • 设置完这些变量之后使用flag.parse()来解析命令行的参数

JSON

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 key-val的形式
  • 中括号表示数组,大括号表示对象,一个个的键值对用,号分隔开
  • 序列化方法上面写过了,用json.Marshal()
  • 反序列化用json.Unmarshal([]byte(str), &xxx)

http://www.ppmy.cn/news/1063662.html

相关文章

Linux学习笔记-Ubuntu系统下配置ssh免密访问

Ubuntu系统下配置ssh免密访问 一、基本信息二、ssh安装2.1 查看是否已经安装ssh2.2 安装ssh2.3 查看ssh安装状态 三、启动、停止,及开机自启动3.1 启动ssh3.2 关闭ssh3.3 使用systemctl设置ssh服务自启动3.4 使用systemctl关闭ssh开机启动 四、配置通过密钥进行免密…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生(Cloud Native):2. 容器编排(Container Orchestration): 小结 概念 云原生和容器编排是两个不同的概念,但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

【Git】测试持续集成——Git+Gitee+PyCharm

文章目录 概述一、使用Gitee1. 注册账号2. 绑定邮箱3. 新建仓库4. 查看项目地址 二、安装配置Git1. 下载安装包2. 校验是否安装成功。3. 配置Git4. Git命令5. Git实操 三、PyCharmGit1. 配置Git2. Clone项目3. 提交文件到服务器4. 从服务器拉取文件 概述 持续集成(…

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…

流处理详解

【今日】 目录 一 Stream接口简介 Optional类 Collectors类 二 数据过滤 1. filter()方法 2.distinct()方法 3.limit()方法 4.skip()方法 三 数据映射 四 数据查找 1. allMatch()方法 2. anyMatch()方法 3. noneMatch()方法 4. findFirst()方法 五 数据收集…

Unity Meta Quest MR 开发教程:(二)自定义透视 Passthrough【透视功能进阶】

文章目录 📕教程说明📕动态开启和关闭透视⭐方法一:OVRManager.instance.isInsightPassthroughEnabled⭐方法二:OVRPassthroughLayer 脚本中的 hidden 变量 📕透视风格 Passthrough Styling⭐Inspector 面板控制⭐代码…

Linux 内核page migration设计文档

概述 page migration设计之初是在numa system的各个node之间迁移physical pages,意味着进程页面的虚拟地址不会变化,物理地址发生改变,migration的目的将page迁移到临近的cpu上降低内存访问延迟。 页面迁移粗略步骤 A. In kernel use of m…