分包 通过 import
关键字来引入本地包代码
import (
"./fs" // 引入本地fs包
)
切记一点,小写开头的是private的,大写开头的是public的。使用strconv
这个工具包可以经常转换比如数字转字符串、boolean转字符串。而且需要注意的是,在同一个包内是可以不用引入直接调用的,并且不能出现同名的函数。尤其是大写开头的
在go里面,函数返回一般会带一个error
func t() (string, error) {}
自定义error是支持的。不过需要重写Error()
方法。代码在这
// 自定义 Error
type Error struct {
msg string
code int
}
// 自定义异常要实现这个方法
func (e *Error) Error() string {
return fmt.Sprintf("%d - %s", e.code, e.msg)
}
使用io/ioutil
可以读取文件代码 写文件也可以这个工具代码
转换JSON可以使用encoding/json
工具包,具体使用可以参考这里
反射在这里使用的很高详细的这里,使用reflect
包就可以,interface{}
转map
的方法如下
v := reflect.ValueOf(depMap) // 使用反射 获取 map
// 获取map中的指定值
// fmt.Println(depMap["koa"])
fmt.Println(reflect.TypeOf(depMap)) // map[string]interface {}
fmt.Println(v.MapIndex(reflect.ValueOf("koa"))) // 使用这个方式来直接取map 中 koa的值
// index 第一个参数是 下标 -- 循环输出map中的值
for _, key := range v.MapKeys() {
val := v.MapIndex(key)
fmt.Printf("%s -> %s \n", key.Interface(), val.Interface())
}
interface{}
转slice
方法如下
// 循环输出 slice 中的值
keywords := obj["keywords"].([]interface{})
fmt.Println(reflect.TypeOf(keywords))
v = reflect.ValueOf(keywords)
fmt.Println(v.Index(0)) // 直接取第一个数的值
for _, val := range keywords{
val := reflect.ValueOf(val)
fmt.Println(val.Interface())
}