当前位置: 首页 > article >正文

go语言的包使用,以及错误处理

一.包

1.包的分类:系统内置、自定义、第三方


2.自定义包:外部引用包里面的内容(如变量、常量、类型、函数等),包里面内容的首字母大写
	格式:
	import (
		 _"day04/calc"  	//匿名导入,果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包
	       aka "day04/calc"    //起别名
		"day04/calc"
		"fmt"
	)
	(1)整个目录通过go mod init  name ,初始化项目
	(2)在方法里面定义父目录的报名a.go-->package demo01
	(3)其他里面导入使用"day08/demo01" --->demo01.Sum(10, 20),包名.方法名
3.第三方包下载:go get + 仓库地址@版本号        //下载包
	    go get -u + 仓库地址@版本号     //更新包
	    go install   			//Go 1.17版本后下载包
	    go mod tidy  			//清理包,会自动安装依赖包,不需要的包清理掉  
	   
4.go.sum文件:在向模块添加第三方依赖时,Go工具链会生成并管理go.sum文件,文件结构示例
	.
	|-- go.mod
	|-- go.sum
	|-- main.go 


5.正则表达式:regexp 包
	.: 匹配任意单个字符,除了换行符。
	^: 匹配字符串的开头。
	$: 匹配字符串的结尾。
	*: 匹配前面的子表达式零次或多次。
	+: 匹配前面的子表达式一次或多次。
	?: 匹配前面的子表达式零次或一次。
	{}: 指定前面的子表达式出现的次数。
	[]: 字符集合中的任意一个字符。
	|: 匹配左右两个表达式中的任意一个。
	(): 分组

	(1)正则的使用:编译+匹配
		1)先写正则规则进行编译
		#re := regexp.MustCompile("\\d+")
		re := regexp.MustCompile(`\d+`)  // 编译一个正则表达式,匹配一个或者多个数字
		2)调用函数匹配
			#判断字符串是否匹配正则表达式
				re.MatchString(str) // 输出 true
			#查找第一个匹配的字符串
				re.FindString(str) //查找第一个匹配的字符串,输出 123
			#查找所有匹配的子串
				re.FindAllString(str, -1) // 输出 [123 456 789]	
			#替换所有匹配的子串
				re.ReplaceAllString(str, "***")  //输出替换后的完整版字符串

6.错误处理
	(1)error 接口,返回错误描述信息
		// 1.自定义错误类型
		type MyError struct {
		        msg string
		}
		
	(2)panic:捕获错误,中止程序

	(3) recover: 与 defer 一起使用,捕获panic错误,让panic程序不中止,

		package main
		import "fmt"
		func thirdPartyLibrary() {
		    // 模拟第三方库内部触发 panic
		    panic("第三方库内部出现错误")
		}
		
		func safeCall() {
		    defer func() {
		        if r := recover(); r != nil {
		            fmt.Println("捕获到第三方库的 panic:", r)
		        }
		    }()
		    thirdPartyLibrary()
		}
		
		func main() {
		    safeCall()
		    fmt.Println("程序继续执行...")
		}
	




一.包

1.包的分类:系统内置、自定义、第三方


2.自定义包:外部引用包里面的内容(如变量、常量、类型、函数等),包里面内容的首字母大写
    格式:
    import (
         _"day04/calc"      //匿名导入,果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包
           aka "day04/calc"    //起别名
        "day04/calc"
        "fmt"
    )
    (1)整个目录通过go mod init  name ,初始化项目
    (2)在方法里面定义父目录的报名a.go-->package demo01
    (3)其他里面导入使用"day08/demo01" --->demo01.Sum(10, 20),包名.方法名
3.第三方包下载:go get + 仓库地址@版本号        //下载包
        go get -u + 仓库地址@版本号     //更新包
        go install               //Go 1.17版本后下载包
        go mod tidy              //清理包,会自动安装依赖包,不需要的包清理掉  
       
4.go.sum文件:在向模块添加第三方依赖时,Go工具链会生成并管理go.sum文件,文件结构示例
    .
    |-- go.mod
    |-- go.sum
    |-- main.go 


5.正则表达式:regexp 包
    .: 匹配任意单个字符,除了换行符。
    ^: 匹配字符串的开头。
    $: 匹配字符串的结尾。
    *: 匹配前面的子表达式零次或多次。
    +: 匹配前面的子表达式一次或多次。
    ?: 匹配前面的子表达式零次或一次。
    {}: 指定前面的子表达式出现的次数。
    []: 字符集合中的任意一个字符。
    |: 匹配左右两个表达式中的任意一个。
    (): 分组

    (1)正则的使用:编译+匹配
        1)先写正则规则进行编译
        #re := regexp.MustCompile("\\d+")
        re := regexp.MustCompile(`\d+`)  // 编译一个正则表达式,匹配一个或者多个数字
        2)调用函数匹配
            #判断字符串是否匹配正则表达式
                re.MatchString(str) // 输出 true
            #查找第一个匹配的字符串
                re.FindString(str) //查找第一个匹配的字符串,输出 123
            #查找所有匹配的子串
                re.FindAllString(str, -1) // 输出 [123 456 789]    
            #替换所有匹配的子串
                re.ReplaceAllString(str, "***")  //输出替换后的完整版字符串

6.错误处理
    (1)error 接口,返回错误描述信息
        // 1.自定义错误类型
        type MyError struct {
                msg string
        }
        
    (2)panic:捕获错误,中止程序

    (3) recover: 与 defer 一起使用,捕获panic错误,让panic程序不中止,

        package main
        import "fmt"
        func thirdPartyLibrary() {
            // 模拟第三方库内部触发 panic
            panic("第三方库内部出现错误")
        }
        
        func safeCall() {
            defer func() {
                if r := recover(); r != nil {
                    fmt.Println("捕获到第三方库的 panic:", r)
                }
            }()
            thirdPartyLibrary()
        }
        
        func main() {
            safeCall()
            fmt.Println("程序继续执行...")
        }
    


http://www.kler.cn/a/590643.html

相关文章:

  • 欧拉降幂-乘积幂次
  • 深入理解 IP、子网掩码、端口号和协议
  • Spring Cloud Config - 动态配置管理与高可用治理
  • 大型语言模型(LLM):解码人工智能的“语言基因“
  • Qt中打开windows的cmd窗口并显示
  • TypeScript接口 interface 高级用法完全解析
  • 深度学习-服务器训练SparseDrive过程记录
  • 文件包含与下载漏洞
  • JavaScript 元编程革命:Proxy 如何重塑语言本质
  • LLM对齐方法作用:主要解决大型语言模型(LLMs)输出与人类价值观、需求和安全规范不一致的问题
  • 【华为OD机考真题】- 用户调度问题(Java)
  • 使用zenodo-upload进行zenodo大文件上传
  • 【力扣】2666. 只允许一次函数调用——认识高阶函数
  • CellOracle|基因扰动研究基因功能|基因调控网络+虚拟干预
  • 大模型推理:LM Studio在Mac上部署Deepseek-R1模型
  • Windows安卓子系统WSA安装面具Root
  • LabVIEW旋转设备状态在线监测系统
  • 域渗透—哈希传递攻击(PTH)学习
  • 攻克 PDF 发票打印难题,提升财务效率
  • 开发者部署工具PasteSpiderV5版本更新杂谈