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

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("程序继续执行...")
        }
    

相关文章:

  • 亚马逊Prime Day新算法曝光,2025年流量分配机制大调整
  • numpy学习笔记10:arr *= 2向量化操作性能优化
  • 菜鸟之路Day24一一前端工程化(一)
  • 数据开发岗笔试题>>sql(hive) ,excel [2025]
  • 【论文阅读】实时全能分割模型
  • 分布式唯一ID生成算法——MongoDB ObjectId 算法
  • C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。
  • Elasticsearch 介绍:分布式搜索与分析引擎
  • 基于Babylon.js的Shader入门之五:让Shader支持法线贴图
  • Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
  • SQL Server 触发器
  • Python中的列表:全面解析与应用指南
  • uniapp配置代理解决跨域问题
  • PyTorch入门指南:环境配置与张量初探
  • 您对下列文件的本地修改将被合并操作覆盖XXXXX请 在 合 并前 提 交 或贮 藏 您 的 修 改
  • Mac:Ant 下载+安装+环境配置(详细讲解)
  • 2025年渗透测试面试题总结-某四字大厂实习面试复盘 二面(题目+回答)
  • 多种语言请求API接口方法
  • Python、MATLAB和PPT完成数学建模竞赛中的地图绘制
  • 【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践
  • 全国首例!上市公司董监高未履行公开增持承诺,投资者起诉获赔
  • 30天内三访中国,宝马董事长:没有一家公司可以在全球价值链外独立运行
  • 乌克兰基辅遭大规模袭击,已致12人死亡
  • 美联储官员:若特朗普高额关税致失业率飙升,将支持降息
  • 最高法:“盗链”属于信息网络传播行为,构成侵犯著作权罪
  • 俄外长拉夫罗夫将出席金砖国家外长会