咔咔博客之结构体转json
在这一节我们将会介绍几个新的知识点
- interface{}
- init()
案例
在这里会发现我们的类型是打印出来了,但是没有值,这是怎么个回事
那我们在来看一下这个案例
发现这个时候就会把值打印出来了,并且是一个json
那么上边那个案例为什么没哟打印出来呢!
那是因为在结构体里边定义的属性如果是首写字母是小写的话就代表的是私有属性。只有改变为大写后,别的方法才可以读取到
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Like []string
}
func main() {
person := Person{Name: "咔咔", Age: 24, Like: []string{"咔咔博客", "咔咔手赚网"}}
bytes, e := json.Marshal(person)
if e != nil {
fmt.Println("结构体转json失败,错误err是", e)
} else {
jsonStr := string(bytes)
fmt.Printf("type:%T,value:%v", jsonStr, jsonStr)
}
}
interface 讲解
使用了interface{}代表可以使用任意类型
在把创建映射的几种方法回顾一下
init
这个例子一看就可以明白
我们没有给main方法里边写任何调用,但是inti的方法里边的打印确出来了
这个就跟PHP里边的initialize()方法是一样的,都是初始化的意思
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Like []string
}
func init() {
fmt.Printf("我是初始化函数")
}
func main() {
}
/**
结构体转json
*/
func main0() {
person := Person{Name: "咔咔", Age: 24, Like: []string{"咔咔博客", "咔咔手赚网"}}
bytes, e := json.Marshal(person)
if e != nil {
fmt.Println("结构体转json失败,错误err是", e)
} else {
jsonStr := string(bytes)
fmt.Printf("type:%T,value:%v", jsonStr, jsonStr)
}
}
/**
interface讲解
*/
func main1() {
// 定义了interface 后边就可以跟任意类型了
mMap := make(map[string]interface{})
mMap["博客地址"] = "blog.fangkang.top"
mMap["age"] = 21
fmt.Println(mMap)
}