标签:err ada point duration 退出 字段 lan col UNC
type 类型名 struct {
	字段1 字段1 类型
	字段2 字段2 类型
}
示例:
func main() {
	var s1 = Student{1, "zs", ‘f‘, 18, "sh"}
	fmt.Println(s1)
	var s2 = Student{id: 2, age: 25}
	fmt.Println(s2)
	var s3 Student
	s3.id = 3
	s3.age = 26
	fmt.Println(s3)
	s4 := &Student{4, "zs", ‘f‘, 18, "sh"}
	fmt.Println(s4)
	fmt.Println((*s4).id)
	fmt.Println(s4.id)
}
type Player struct {
	Name        string
	HealthPoint int
	MagicPoint  int
}
func main (){
	tank := new(Player)
	fmt.Println(tank) // &{ 0 0}
	tank.Name = "Canon"
	(*tank).HealthPoint = 300
}
提示: Go 语言中,访问结构体指针的成员交量时可以继 使用 "."。这是因为 Go语言为了方便开发者访问结构体指针的成员变量,使用了语法糖技术,将ins.Name 形式转换为 (*ins).Name
type Student struct {
	id   int
	name string
}
func temStudent(tmp Student) {
	tmp.id = 200
	fmt.Println(tmp)
}
func temStudent2(tmp *Student) {
	tmp.id = 300
	fmt.Println(tmp)
}
func main() {
	var s = Student{1, "zs"}
	temStudent(s)
	fmt.Println(s)
	temStudent2(&s)
	fmt.Println(s)
}
一个结构体,会占用一段连续的内存空间
type Student struct {
	A int32
	B int32
	C int32
	D int32
}
func main(){
	var s Student
	fmt.Printf("A addr: %p\n", &s)
	fmt.Printf("A addr: %p\n", &s.A)
	fmt.Printf("B addr: %p\n", &s.B)
	fmt.Printf("C addr: %p\n", &s.C)
	fmt.Printf("D addr: %p\n", &s.D)
}
type User struct {
	id   int
	name string
	age  int
}
func NewUser(id int, name string, age int) *User {
	user := &User{
		id:   id,
		name: name,
		age:  age,
	}
	return user
}
func main() {
	user := NewUser(1, "wsl", 18)
	fmt.Println(user)
}
go支持只提供类型而不写字段名的方式,也就是匿名字段,也称为嵌入字段
type Person struct {
	name string
	sex  string
	age  int
}
type Student struct {
	Person
	id   int
	addr string
}
func main() {
	s1 := Student{Person{"zs", "fa", 20}, 1, "bj"}
	fmt.Println(s1)
	s2 := Student{Person: Person{"zs", "fa", 20}}
	fmt.Println(s2)
	s3 := Student{Person: Person{name: "zs"}}
	fmt.Println(s3)
}
同名字段的情况
type Person struct {
	name string
	sex  string
	age  int
}
type Student struct {
	Person
	id   int
	addr string
	name string
}
func main() {
	var s Student
	s.name = "z"
	fmt.Println(s) // {{  0} 0  z}
	s.Person.name = "ww"
	fmt.Println(s) // {{ww  0} 0  z}
}
指针类型匿名字段
type Person struct {
	name string
	sex  string
	age  int
}
type Student struct {
	*Person
	id int
}
func main() {
	s1 := Student{&Person{"z", "m", 18}, 1}
	fmt.Println(s1) // {0xc00006a300 1}
}
type Person struct {
	name string
	sex  string
	age  int
}
type mystr string
type Student struct {
	Person
	int
	mystr
}
func main() {
	s1 := Student{Person{"zs", "m", 18}, 1, "bj"}
	fmt.Println(s1)
}
格式:
func (接收参数名 接收类型) 方法名(参数列表)(返回值)
type MyInt int
func Add(a, b MyInt) MyInt {
	return a + b
}
func (a MyInt) Add(b MyInt) MyInt {
	return a + b
}
func main() {
	var a MyInt = 1
	var b MyInt = 2
	fmt.Println(Add(a, b))
	fmt.Println(a.Add(b))
}
type Person struct {
	name string
	sex  string
	age  int
}
func (p Person) PrintInfo() {
	fmt.Println(p.name, p.sex, p.age)
}
func main() {
	p := Person{"zs", "m", 18}
	p.PrintInfo()
}
type Person struct {
	name string
	sex  string
	age  int
}
func (p *Person) SetInfoPointer() {
	(*p).name = "zs"
	p.sex = "fe"
	p.age = 20
}
func (p Person) SetInfoValue() {
	p.name = "ls"
	p.sex = "m"
	p.age = 20
}
func main() {
	p1 := Person{"ww", "male", 18}
	fmt.Println(p1) // {ww male 18}
	p1.SetInfoPointer()
	fmt.Println(p1) // {zs fe 20}
	p1.SetInfoValue()
	fmt.Println(p1) //{zs fe 20}
}
type Person struct {
	name string
	sex  string
	age  int
}
func (p *Person) PrintInfo(){
	fmt.Println(p.name,p.sex,p.age)
}
type Student struct {
	Person
	id int
	addr string
}
func main (){
	p := Person{"zs","m", 20}
	p.PrintInfo() // zs m 20
	s := Student{id:2,addr:"bj"}
	s.PrintInfo() //  0
}
type Person struct {
	name string
	sex  string
	age  int
}
func (p *Person) PrintInfo() {
	fmt.Println(p.name, p.sex, p.age)
}
type Student struct {
	Person
	id   int
	addr string
}
func (s *Student) PrintInfo() {
	fmt.Println("student:", s.name, s.sex, s.age)
}
func main() {
	p := Person{"zs", "m", 18}
	p.PrintInfo() // zs m 18
	s := Student{Person{"l", "m", 30}, 2, "b"}
	s.PrintInfo()
	// 还能调用父类方法
	s.Person.PrintInfo()
}
func main() {
	client := &http.Client{}
	// 创建一个http请求
	req, err := http.NewRequest("POST", "http://www.163.com/", strings.NewReader("key=value"))
	// 发现错误就打印并退出
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
		return
	}
	// 为标头添加信息
	req.Header.Add("User-Agent", "myClient")
	// 开始请求
	resp, err := client.Do(req)
	// 处理请求的错误
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
		return
	}
	data, err := ioutil.ReadAll(resp.Body)
	fmt.Println(string(data))
	defer resp.Body.Close()
}
在本例子使用的 req.Header 类型为 http.Header 就是典型的自定义类型,并且拥有自己的方法。 http.Header 部分定义如下:
type Header map[string][]string
func (h Header) Add(key, value string) {
	textproto.MIMEHeader(h).Add(key, value)
}
func (h Header) Get(key string) string {
	return textproto.MIMEHeader(h).Get(key)
}
Header 实际是一个以字符串为键、字符串切片为值的映射。Add() Header 的方法,map 是一个引用类型,因此即便使用(h Header)的费指针接收器,也可以修改map的值。
func main() {
	fmt.Println(time.Second.String())
}
time Second一个常量,下面代码的加粗部分就是 time.Second 定义:
const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute )
Second 的类型为 Duration ,而 Duration 实际是 int64 的类型,定义如下:
type Duration int64
// 它拥有一个 String 的方法,部分定义如下:
func (d Duration) String() string {
	... ...
	return string(buf[w:])
}
Duration.String 可以将 Duration 值转为字符串。
标签:err ada point duration 退出 字段 lan col UNC
原文地址:https://www.cnblogs.com/Wshile/p/12801848.html