[Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
init()方法
如果想在一個(gè)go文件里,進(jìn)行一些初始化的工作,可以把代碼放到init()方法中。
init()方法先被執(zhí)行。
func init() { // initialization of package }注意:它是沒(méi)有輸入?yún)?shù)和返回參數(shù)的。
?
identifier首字母大小寫(xiě)區(qū)分
當(dāng)identifier(比如constant,variable,type,function,struct field,...)的命名首字母是大寫(xiě)的話,那表示這個(gè)identifier在包外是可以見(jiàn)的;
類似public的作用。
?
相反,當(dāng)identifier的首字母小寫(xiě)時(shí),表示這個(gè)idenfitier只在包內(nèi)可見(jiàn);
類似private的作用。
?
注意:在包外是否可見(jiàn)與go語(yǔ)言的反射會(huì)有一定關(guān)系,如果只是包內(nèi)可見(jiàn),那在進(jìn)行反射查找時(shí)會(huì)有問(wèn)題產(chǎn)生。
?
我們也可以通過(guò)大小寫(xiě)來(lái)進(jìn)行對(duì)初始化的限制
pakcage matrixtype matrix struct {... }function NewMatrix(params) *matrix {m := new(matrix)//m is initializedreturn m }在main中
package mainimport "matrix"wrong := new(matrix.matrix) //will not compile(matrix is private) right := matrix.NewMatrix(...) //the ONLY way to instantiate a matrix我們現(xiàn)在在matrix包外,只能通過(guò)NewMatrix這個(gè)方法來(lái)進(jìn)行初始化。
轉(zhuǎn)載于:https://www.cnblogs.com/lemonbar/p/3925961.html
總結(jié)
以上是生活随笔為你收集整理的[Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: thinking in java --
- 下一篇: volatile关键字及编译器指令乱序总