结构体入门

hello world

结构体创建

向其中赋值的示例

type Book struct {  
    Title      string  
    Author     string  
    Year       int  
    CheckedOut bool  
}  
  
func main() {  
    b1 := Book{}  
    info := []byte(`{"Title":"a","Author":"b", "Year": 1, "CheckedOut": false}`)  
    _ = json.Unmarshal(info, &b1)  
  
    fmt.Printf("book title is %s", b1.Title)  
}

go 的json unmarshal 是可以只将部署值传过去的,示例


const myData = `{
		"name":"alex",
		"age":3012312123423423421
	}`

type myObj struct {
	Age int64 `json:"age"`
}

func main() {
	//obj := make(map[string]interface{})
	obj := myObj{}
	_ = json.Unmarshal([]byte(myData), &obj)
	data, _ := json.Marshal(obj)
	fmt.Println(string(data))
}

结构体方法

通过字符串返回

通过地址返回

通过地址返回也可以这么写

值接收器和指针接收器

无论是值接收器,还是指针接收器,都可以给 struct 添加方法,只是值接收器里的函数,是将结构体实例化的对象拷贝了一份,对副本操作。而指针接收器,则是直接操作结构体实例化对象,能直接修改这个对象本身的属性。一个示例如下

上面是一个基本的例子,能看出来,刚开始初始化了一个 宽4高5的长方形,之后直接用值接收器的方法,获得面积。之所以这里用值传递,是因为我们没有改变这个长方形实例的任何属性,都是拿长方形实例的属性做额外的计算。之后我们在Scale方法里,修改了长方形的宽和高,由于是对长方形实例本身进行操作,所以要用指针接收器。

再来一个更复杂一点的例子: 在下面的例子里,我们定义了 Book 和 Library,其中Library 的 Books是一个切片,Library结构体有AddBook和CheckOutBook方法,当AddBook的时候,会将书添加到Books切片里,当CheckOutBook的时候,会从Books 切片里移除这本书。Book结构体本身只有一个DisplayInfo的方法,将书的信息打印出来。

Last updated