flag 是Go 标准库提供的解析命令行参数的包。
成都创新互联公司是一家专注于成都网站设计、网站建设与策划设计,大邑县网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:大邑县等地区。大邑县做网站价格咨询:18980820575
使用方式:
flag.Type(name, defValue, usage)
其中Type为String, Int, Bool等;并返回一个相应类型的指针。
flag.TypeVar(flagvar, name, defValue, usage)
将flag绑定到一个变量上。
expvar 包是 Golang 官方提供的公共变量包,它可以辅助调试全局变量。支持一些常见的类型: float64 、 int64 、 Map 、 String 。如果我们的程序要用到上面提的四种类型(其中,Map 类型要求 Key 是字符串)。可以考虑使用这个包。
这些基础的功能就不多说了,大家可以直接看官方的 文档 。
看源码的时候发现一个非常有意思的调试接口, /debug/vars 会把所有注册的变量打印到接口里面。这个接口很有情怀。
感觉这个包还是针对简单变量,比如整形、字符串这种比较好用。
看到就写了,并没有什么沉淀,写得挺乱的。这个包很简单,但是里面还是有些可以借鉴的编码和设计。新版本的 Golang 已经能解析整形为 Key 的哈希表了,这个包啥时候能跟上支持一下?
先看一下目录结构,注意这里的src名称是必须的,go在设置了GOPATH后,默认会添加src去寻找package,暂未查询是否有方法不按照src查询
根据上面的描述,Go语言中通过包中函数的名称来区分公共函数和私有函数,我们在main函数中是无法调用myPrivateFunc的
此时如果执行通过go run方式执行,会看到如下的提示信息,这与大部分语言对于包管理方式相关,所以我们通过两种不同的方法来让代码执行起来
返回如下,这里面对我们后续执行有影响的两个参数GO111MODULE和GOPATH
如果要使用gopath模式引用包,则需要关闭mod模式
设置GOPATH为当前路径,即main.go所在的路径
此时再查看go env时,GOPATH已经发生改变
我们再次尝试执行代码
可以看到public函数被调用
你需要设置 GOPATH 环境变量
你 main.go 中需要 import 相应包
你 调用处需要带上包前缀,比如 tempconv.FToC
json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好。官方提供的Json解析包已经非常强大,我们接下来讲解Json的序列化与反序列化操作。另外还有一些第三方的Json解析库,也能够高效的操作Json对象,比如simplejson,ffjson等。下面是两个比较重要的函数:
• Json Marshal:将数据编码成json字符串
Marshal 用于将struct对象序列化到json对象中。v是interface{}类型,任何类型都实现了空接口。
1:tag中的第一个参数是用来指定别名,比如Name 指定别名为 username `json:"username"`
2:如果不想指定别名但是想指定其他参数用逗号来分隔,omitempty 指定到一个field时,如果在赋值时对该属性未赋值或者对该属性赋值为 zero value,那么将Person序列化成json时会忽略该字段
3:- 指定到一个field时,无论有没有值,将Person序列化成json时都会忽略该字段
4:string 指定到一个field时,比如Person中的Count为int类型 如果没有任何指定在序列化到json之后也是int 比如这个样子 “Count”:0,但是如果指定了string之后序列化之后也是string类型的,那么就是这个样子"Count":"0"
• struct序列化为Json
• slice序列化为Json
• map 序列化为Json
• Json Unmarshal:将json字符串解码到相应的数据结构,Unmarshal的第一个参数是[]byte,第二个参数是接受json解析的数据结构。
下面我们依次讲解Json的操作。
1:将Json序列化进入结构体
2::将Json序列化到结构体slice
3:将Json序列化进Map
4:将Json序列化进Slice