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

【Golang】补充:占位符、转义字符、错误处理

🔥 个人主页:星云爱编程

🔥 所属专栏:Golang

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

1、占位符

1.1通用占位符

  • %v :默认格式的值。适用于大多数类型。
  • %+v :打印结构体时包含字段名。
  • %#v :Go语法表示的值,通常用于调试。
  • %T :值的类型

1.2布尔值

  • %t :布尔值( true 或 false )

1.3整数

  • %b :二进制表示。
  • %d :十进制表示。
  • %o :八进制表示。
  • %x :十六进制表示(小写字母)。
  • %X :十六进制表示(大写字母)。

1.4. 浮点数

  • %f :默认宽度,默认精度。
  • %e :科学计数法(小写 e )。
  • %E :科学计数法(大写 E )。
  • %g :根据情况选择 %e 或 %f ,去除末尾的0。
  • %G :根据情况选择 %E 或 %f ,去除末尾的0。

洛谷P5714 【深基3.例7】肥胖问题

该例题可以用作%g联系

1.5字符串和字符切片

  • %s :字符串。
  • %q :带双引号的字符串,适合输出字符串字面量。
  • %x :十六进制表示(小写字母)。
  • %X :十六进制表示(大写字母)

1.6指针

  • %p :指针地址(十六进制表示)。

1.7宽度和精度控制

  • %[width].[precision]f :控制浮点数的宽度和精度。
  • %[width]s :控制字符串的宽度

2、转义字符

2.1常见转义字符

转义字符      含义
\n 换行符
\t制表符(Tab)
\\反斜杠
\"双引号
\'单引号
\r回车符
\b退格符
\f换页符
\a响铃符
\v垂直制表符

2.2注意事项

  • 转义字符必须用双引号( " )或反引号( ` )括起来。

  • 反引号( ` )中的字符串不会解析转义字符。

  • 在Go语言中,所有的转义字符都只算作一个字符,无论它们由多少个字符组成。

3、Go错误处理

Go语言中的错误处理主要通过返回 error 类型来实现,这是一种显式的错误处理机制。

3.1error类型

error 是一个内置接口类型,定义如下

type error interface {
    Error() string
}

任何实现了 Error() string 方法的类型都可以作为 error 使用。

3.2创建错误

  • 使用 errors.New 创建简单的错误:
err := errors.New("这是一个错误")
  • err := errors.New("这是一个错误"):
err := fmt.Errorf("错误:%s", "文件未找到")

3.3返回错误

函数通常将 error 作为最后一个返回值:

func Divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("除数不能为零")
    }
    return a / b, nil
}

3.4处理错误

调用函数时,检查返回的 error :

result, err := Divide(10, 0)
if err != nil {
    fmt.Println("错误:", err)
    return
}
fmt.Println("结果:", result)

3.5 自定义错误类型

可以通过定义结构体实现自定义错误:

type MyError struct {
    Code    int
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("错误代码:%d,错误信息:%s", e.Code, e.Message)
}

func Process() error {
    return &MyError{Code: 404, Message: "资源未找到"}
}

 3.6错误检查

使用 errors.Is 和 errors.As 检查错误

if errors.Is(err, os.ErrNotExist) {
    fmt.Println("文件不存在")
}

var myErr *MyError
if errors.As(err, &myErr) {
    fmt.Println("自定义错误:", myErr.Code, myErr.Message)
}

3.7案例

package main

import (
    "errors"
    "fmt"
    "os"
)

func main() {
    result, err := Divide(10, 0)
    if err != nil {
        fmt.Println("错误:", err)
    } else {
        fmt.Println("结果:", result)
    }

    data, err := ReadFile("test.txt")
    if err != nil {
        fmt.Println("错误:", err)
    } else {
        fmt.Println("文件内容:", string(data))
    }
}

func Divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("除数不能为零")
    }
    return a / b, nil
}

func ReadFile(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, fmt.Errorf("读取文件失败:%w", err)
    }
    return data, nil
}

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。


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

相关文章:

  • Rust 面向对象
  • 基于Zookeeper的微服务配置管理与灰度发布实战指南
  • Elasticsearch:理解政府中的人工智能 - 应用、使用案例和实施
  • SQLark导出功能详解|轻松管理数据库数据与结构
  • 鸿蒙富文本实践
  • C++进制转换的方法
  • 服务器修改内存后Oracle无法正常启动
  • 3.0 Disruptor的使用介绍(一)
  • Swift语音助手(苹果生态系统的核心编程语言)
  • Ubuntu与Windows之间相互复制粘贴的方法
  • Docker 存储管理那些事儿:简单易懂的讲解与实践示例
  • Qt跨平台文件传输系统开发全解:TCP/IP协议+多线程架构
  • pyQt学习笔记——Qt资源文件(.qrc)的创建与使用
  • 无人设备遥控器之调度自动化技术篇
  • 国产芯片解析:龙讯HDMI Splitter系列:多屏共享高清
  • 使用CSS3实现炫酷的3D视差滚动效果
  • SAP:越来越多组织通过AI解决数据问题,迈向大规模应用
  • 优化 Docker 构建之方法(Methods for Optimizing Docker Construction)
  • k8s scheduler几种扩展方式的关系及区别
  • ubuntu服务器进程启动失败的原因分析