定义别名后的类型和原来的类型不是同样的类型,举例:

package main

import "fmt"

type integer int

func main() {
	var i integer = 1
	var j int = 2
	//强制转换成int类型才行(虽然integer也是int类型)
	j = int(i)
	//强制转换成integer类型才行(虽然integer也是int类型)
	i = integer(j)
	fmt.Println(j)
	fmt.Println(i)
}

结构体中的tag:


package main

import (
	"fmt"
	"encoding/json"
)

type Student struct {
	//注意,要大写才行
	Name string `json:"name"`
	Age int `json:"age"`
	Score int `json:"score"`
}

func main() {
	var stu Student = Student{
		Name: "stu01",
		Age: 18,
		Score: 80,
	}
	fmt.Println(stu)
	//打包成json
	data, err := json.Marshal(stu)
	if err == nil {
		fmt.Println(data)
		fmt.Println(string(data))
	}

}

结构体中的tag首字母必须大写!因为json.Marshal()是在另一个包里面。但想要输出的json是小写可以用:json:"name"

结构体的赋值,取值:

package main

import (
	"time"
	"fmt"
)

type Cart struct {
	name string
	age int
}

type Train struct {
	Cart
	int
	start time.Time
}

func main() {
	var t Train
	t.age = 1
	t.int = 6
	t.Cart.name = "cartName"
	t.start = time.Now()
	fmt.Println(t)
}

结构体的函数(注意引用传递来改变结构体的值):

package main

import "fmt"

type Student struct {
	Name string
	Age int
	Score int
}

func (p1 Student) init1(name string, age,score int) {
	p1.Name = name
	p1.Age = age
	p1.Score = score
}

//指针写法
func (p2 *Student) init2(name string, age,score int) {
	p2.Name = name
	p2.Age = age
	p2.Score = score
}

func main() {

	var stu1 Student
	//如此只是复制,而非引用。
	stu1.init1("zhangsan", 18, 100)
	fmt.Println(stu1)

	var stu2 Student
	//按理来说要这样写
	(&stu2).init2("zhangsan", 18, 100)
	fmt.Println(stu2)
	//然而,这样写也是可以的
	stu2.init2("zhangsan", 18, 100)
	fmt.Println(stu2)

}