golang中级进阶(二):结构体
1、嵌套结构体和json的序列化反序列化 Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似。和其他面向对 象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性。
2、于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。
3、核心思想就是, 外层实现接口,通过递归嵌套将被实现的接口实例置于内层,从而达到外层定义,内层使用的效果 : BaseBase和Derived都是外层结构体,在它们这一层实现了F2()。
4、在golang开发中,结构体是重要的数据类型,用于定义数据结构和方法,同时也可以组成更复杂的数据类型。
go语言中,结构体是值类型,函数传参是通过拷贝,那为啥在unmarshal等函数中...
因为struct是值类型,如果结构体比较复杂的话,值拷贝性能开销会比较大,所以该构造函数返回的是结构体指针类型。 调用构造函数 方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数。
按值传递函数参数,是拷贝参数的实际值到函数的形式参数的方法调用。在这种情况下,参数在函数内变化对参数不会有影响。默认情况下,Go编程语言使用调用通过值的方法来传递参数。
可以省略嵌入的Reader字段,而直接访问ReaderName 此时book是一个各个属性全是对应类型零值的一个实例。不是nil。这种情况在Go中称为零值可用。不像java会导致npe 结构体定义时可以在字段后面追加标签说明。
golang 中没有引用传递,只有值和指针传递。
golang获取到string和直接赋值strimg不一样
1、使用string给另一个string赋值Golang中的字符串的赋值并不是拷贝底层的字符串数组,而是数组指针和长度字段的拷贝。
2、没有区别,前者是用string类初始化string类对象b,后者是用const char*初始化string类对象c。是否有00,取决于你怎么实现base64的。
3、java中String new和直接赋值的区别如下:执行语句String str=new String(abc)时,不管字符串池中是否存在字符串abc,直接新建一个字符串abc。注意:新建的字符串abc不是在字符串池中),然后将其付给str。
4、String str = new String(hello);这两个,在结果上没有区别。细微的区别就是 java重写了“” 这个符号 与 new String();这是等同的。hello 是在 堆 中创建了一个对象,并直接赋值。
5、取前面5个字元要用 string([]rune(字zi符fu串chuan)[:5]) 直接用str[:5]取的是前5个 byte,而不是前5个 rune,要先转成[]rune,不然处理不了非ascii字元。