博客
关于我
【Go基础】03 包 标准库
阅读量:177 次
发布时间:2019-02-28

本文共 2451 字,大约阅读时间需要 8 分钟。

Go语言学习资料

包的使用

1.1 工作空间

在开始编写代码之前,首先需要为项目创建一个合适的工作空间。Go语言的包管理和项目结构与其他语言有所不同,需要理解其工作原理。

1.2 源文件

源文件是项目开发的核心文件,通常位于项目根目录下。Go语言的源文件扩展名为.go

1.3 包结构

1.3.1 包结构规则

包名需遵循以下命名规则:

  • 使用简洁、清晰且全小写的名字,便于频繁输入。
  • 包名与代码所在文件夹同名。

包中成员的访问权限由名称大小写决定:

  • Public:首字母大写,可被包外访问。
  • Internal:首字母小写,仅包内成员可访问。

代码示例:

// counters包提供告警计数器功能package counters// alterCounter是一个未公开的类型// 用于保存告警计数器type alterCounter int// 小写字母开头,包外不可见type AlterCounter int// 大写字母开头,包外可见

解决方案:

  • 使用工厂函数创建一个未公开的alterCounter类型的值。

1.3.2 java与Go的区别

  • 在Java中,任何一个.java文件都可以有一个唯一的main方法作为启动函数。
  • 在Go中,任何一个包中都可以有一个唯一的带有main方法的文件。

1.3.3 导入包

Go模块导入示例:

import (    "log"    "runtime")

包替换命令:

replace "liwenzhou.com/q1mi/p2" => "../p2"

日志记录

2.1 log包结构

log包提供一个多routine安全的日志记录器。

2.2 日志输出

2.2.1 格式及标志符

日志格式化设置:

func init() {    log.SetPrefix("TRACE: ")    log.SetFlags(log.Ldate | log.Lmicroseconds | log.Llongfile)}

日志方法示例:

log.Println("message")  // 默认格式:时间戳 文件名:行号 消息log.Fatalln("fatal message")  // 在Println后调用os.Exit(1)log.Panicln("panic message")  // 在Println后调用panic()

日志输出示例:

TRACE: 2021/04/19 18:55:55.188845 D:/GO/src/code.practise/test_log/test_log1.go:15: messageTRACE: 2021/04/19 18:55:55.297291 D:/GO/src/code.practise/test_log/test_log1.go:18: fatal message

日志方法定义:

const (    Ldate        = 1 << iota    Ltime    Lmicroseconds    Llongfile    Lshortfile    LUTC    Lmsgprefix    LstdFlags = Ldate | Ltime)

自定义日志记录器:

Trace = log.New(ioutil.Discard, "TRACE: ", log.Ldate|log.Ltime|log.Lshortfile)Info = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)Warning = log.New(os.Stdout, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)Error = log.New(io.MultiWriter(file, os.Stderr), "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)

日志方法列表:

func (l *Logger) Fatal(v ...interface)func (l *Logger) Fatalf(format string, v ...interface)func (l *Logger) Fatalln(v ...interface)func (l *Logger) Flags() intfunc (l *Logger) Output(calldepth int, s string) errorfunc (l *Logger) Panic(v ...interface)func (l *Logger) Panicf(format string, v ...interface)func (l *Logger) Panicln(v ...interface)func (l *Logger) Prefix() stringfunc (l *Logger) Print(v ...interface)func (l *Logger) Printf(format string, v ...interface)func (l *Logger) Println(v ...interface)func (l *Logger) SetFlags(flag int)func (l *Logger) SetPrefix(prefix string)

数据编码

3.1 json

3.1.1 json到Go

处理方法:

  • 将JSON文档转换为string,然后转换为[]byte
  • 使用json.Unmarshal反序列化到一个map中。

3.1.2 Go到json

处理方法:

  • 使用json.MarshalIndent进行编码。
  • 将Go语言的map或结构体类型值转换为易读的JSON文档。

3.2 xml

[此部分内容待补充]

转载地址:http://jbxj.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实用技巧 | 使用OpenCV进行模糊检测
查看>>
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
查看>>
OpenCV与AI深度学习 | 深入浅出了解OCR识别票据原理
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
OpenCV中的监督学习
查看>>
opencv中读写视频
查看>>
OpenCV中遇到Microsoft C++ 异常 cv::Exception
查看>>
opencv之cv2.findContours和drawContours(python)
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>
opencv之模糊处理
查看>>
Opencv介绍及opencv3.0在 vs2010上的配置
查看>>