Go:pointer

Go:pointer

pointer 指针

基于指针对象的方法

当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需要用到指针了。对应到我们这里用来更新接收器的对象的方法,当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法,如下:

Read more
Go:null judge

Go:null judge

null judge

int空值是0,

string空值是””而不是null或者nil(区别

Slice空值是长度为0的

map空值是nil,

error空值是nil,

struct空值是一个“所有成员都是空值”的空Struct而不是nil,

Read more
Go:Map

Go:Map

Map 要点

注意事项

  • map 是引用类型的: 内存用 make 方法来分配。
  • new,永远用 make 来构造 map。new() 分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址。
  • 当 map 增长到容量上限的时候,如果再增加新的 key-value 对,map 的大小会自动加 1。所以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。
Read more
Go:JSON

Go:JSON

JSON

json.Marshal()

默认转换规则:
1.布尔型转换为 JSON 后仍是布尔型 , 如true -> true
2.浮点型和整数型转换后为JSON里面的常规数字,如 1.23 -> 1.23
3.字符串将以UTF-8编码转化输出为Unicode字符集的字符串,特殊字符比如<将会被转义为\u003c

Read more
Go:new,make,struct{}

Go:new,make,struct{}

new,make,struct{}

函数适用范围返回值填充值
make()仅限创建类型(slice map channel)引用,make返回复杂的结构为slice时:它是一个包含3个域的结构体:指向slice中第一个元素的指针,slice的长度,以及slice的容量。非零值,make(T, args)返回一个初始化的(而不是置零),类型为T的值(而不是*T)。之所以有所不同,是因为这三个类型的背后引用了使用前必须初始化的数据结构
new()所有类型指针,new返回一个指向已清零内存的指针,而make返回一个复杂的结构。零值,new(T)会为T类型的新项目,但new它并不初始化内存,只是将其置零

备注:直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针。

Go:interface

Go:interface

interface 接口

go:interface{}、断言与类型转换

  • Go的接口更大的作用是声明方法集合,而非类型约束。
  • interface{}可用于向函数传递任意类型的变量,但对于函数内部,该变量仍然为interface{}类型(空接口类型),故必须进行类型断言确认类型后检查才能使用(不能直接隐式转换)。
  • 接口类型向普通类型的转换称为类型断言(运行期确定)。
Read more
Go:init()

Go:init()

init()

init()函数特性

  • init()在main包执行之前
  • init()自动执行,不能显示调用
  • 同一个Go文件中可定义多个init()函数,顺序执行
  • 同一个package中不同文件,将文件名按字符串进行字母和数字自然排序,之后顺序调用各文件中的init()
Read more
Go:chain operation

Go:chain operation

chain operation

链式调用注意事项

  • 本身为较宽泛的概念
  • 链式调用的场景:
    • 返回值是一个函数或方法(很少有实际意义);
    • 方法链(func chain或method chain):返回值是一个对象时,可以直接调用对象绑定的方法;
  • 链式调用方法链是包含关系,严格意义上说,链式调用​ 方法链;
Read more
Go:goroutine

Go:goroutine

goroutine

Golang不使用OS层process而使用语言层面(Goroutine)处理 并发 & 并行 Task任务方案(针对业务来说)的个人思考和实践思路随想 —Jack Liu 秋

1.使用OS层面进程管理,虽然成本低廉快捷,但对CPU的性能开销比较大,Golang通过Goroutine的引入,构建一种SandBox沙箱容器式的方案,可以将并发处理任务放在语言层面内部,“隔离“在系统层面之上,构建Goroutine池的同时,也能保证在性能可靠的前提下,安全性也增强。  
目前大规模分布式系统的整体方向,大部分也都是建立在OS系统层之上(而非系统层面)以达到可控的标准控制,将OS系统级内核CPU的开销降到最低保证OS层流畅运行,这也让Linux为代表的服务器OS系统更“专注”做Base底层基础性的业务支撑。

Read more
Go:方法值(func value) 和 方法表达式(func expression)