美文网首页
第10章 1.结构体

第10章 1.结构体

作者: yezide | 来源:发表于2020-01-17 00:18 被阅读0次

1、结构体定义

package main

import "fmt"

type st1 struct {
    i1 int
    f1 float32
    str string
}

func main() {
    ms := new(st1);
    ms.i1 = 1;
    ms.str = "a"
    fmt.Printf("The int is: %d\n", ms.i1)
    fmt.Printf("The str is: %s\n", ms.str)
    fmt.Printf("The struct is: %v\n", ms)

    // 初始化结构体的其他方法

    // 这种写法相当于new
    ms1 := &st1{11, 9.0, "b"}
    fmt.Printf("The struct ms 1 is: %v\n", ms1)

    ms2 := st1{12, 9.1, "c"}
    fmt.Printf("The struct ms2 is: %v\n", &ms2)
}

2、构建工厂类

package main

import "fmt"

type st1 struct {
    i1 int
    f1 float32
    str string
}

func main() {
    s1 := newStr1(1, 2.0, "a");
    fmt.Printf("s1 = %v\n", s1)

}

func newStr1(i1 int, f1 float32, str string) *st1 {
    return &st1{i1, f1, str};
}

3、map和struct的new和make

package main

import "fmt"

type mymap map[string]string

type myst struct {
    i1 int
    f1 float32
    str string
}

func main() {
    // 可以编译
    st1 := new(myst);
    st1.i1 = 1;
    (*st1).f1 = 2.0;
    fmt.Printf("st1.i1 = %v, st1.f1 = %f\n", st1.i1, st1.f1);

    // 不可以编译
    // st2 := make(myst);

    // map、切片
    m1 := make(mymap);
    m1["k1"] = "v1";
    fmt.Printf("m1 = %s\n", m1["k1"]);

    // 虽然可以编译,但map用new的话,会有runTime exception
    // m2 := new(mymap);
    // (*m2)["k1"] = "v1";
}

new() 和 make() 的区别
看起来二者没有什么区别,都在堆上分配内存,但是它们的行为不同,适用于不同的类型。

new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体(参见第 10 章);它相当于 &T{}。
make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel(参见第 8 章,第 13 章)。
换言之,new 函数分配内存,make 函数初始化;下图给出了区别:

相关文章

  • Golang 学习笔记四 结构体

    一、结构体 《快学 Go 语言》第 8 课 —— 结构体1.结构体类型的定义结构体和其它高级语言里的「类」比较类似...

  • 1.结构体

    #include using namespace std; struct student { string nam...

  • 第10章 1.结构体

    1、结构体定义 2、构建工厂类 3、map和struct的new和make new() 和 make() 的区别看...

  • 结构体

    结构体定义* 结构体中的格式:* struch 结构体名* {* 结构体成员变量* }* 结构体中的特点* 1.结...

  • 菜鸡学Swift3.0 13.结构体

    结构体 struct 是值类型 1.定义结构体 struct 结构体类型 { var 结构体属性:类型 ...} ...

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • 结构体与结构体指针数组

    1.结构体定义与使用。 2.结构体指针 与 动态内存开辟。 3.结构体的数组。 4.结构体与结构体指针 取别名。 ...

  • 1220学习总结

    复杂数据类型 1.结构体 2.结构体变量的初始化 3.无名结构体 4.宏定义结构体 5.结构体的嵌套 6.结构体数...

  • 9.C语言(复合类型--结构体-共同体)

    结构体 1.结构体定义和初始化 2.定义结构体变量的方式 1.先声明结构体类型,再定义变量名 2.在声明类型的同时...

  • go day05 结构体

    结构体 1.结构体的初始化 2.结构体指针变量的初始化 3.结构体成员的使用:普通变量 4.结构体成员的使用:指针...

网友评论

      本文标题:第10章 1.结构体

      本文链接:https://www.haomeiwen.com/subject/tzkbxctx.html