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

【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
}

结语

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

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

相关文章:

  • linux中防火墙的配置
  • deploy myEclipse j2ee project to server没反应
  • OpenHarmony子系统开发 - init启动引导组件(三)
  • 56.fm解调最简单的方法过零检测,如何确定计时器的更新速率
  • 批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系
  • 云原生时代的智能流量治理体系设计与实践
  • 【C语言】文件操作(详解)
  • CmDust日志分析工具简单介绍
  • 大模型推理--temperature、top_k、top_p理解
  • 未授权访问
  • neo4j知识图谱常用命令
  • 在Java中使用JDK8创建SpringBoot项目时无法选择Java8
  • es6 fetch
  • Flutter快速搭建聊天
  • eNSP中华为S5700交换机基础配置命令
  • Android Compose 框架物理动画之弹簧动画(Spring、SpringSpec)深入剖析(二十七)
  • SEO长尾关键词精准布局策略
  • JAVA多线程
  • 物联网平台架构介绍
  • redis 学习笔记
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案
  • 朱雀二号改进型遥二运载火箭发射成功
  • 海外考古大家访谈|冈村秀典:礼制的形成与早期中国
  • 上海博物馆展览进校园,“小先生”传递文物知识
  • 定制基因编辑疗法治愈罕见遗传病患儿
  • 湃书单|澎湃新闻编辑们在读的14本书:后工作时代