golang學習筆記(四)

2021-10-23 06:45:44 字數 1257 閱讀 5979

strings包提供字串常用操作函式:

strconv提供字串型別與其他型別相互轉化的函式:

反射修改基本型別

如果在valueof中傳遞的不是位址,則得到的是乙個非指標物件,是唯讀型別

當我們通過valueof傳遞位址時,得到的value物件是指標物件,與原物件有密切關係

指標物件因為安全原因,不允許使用set***進行修改,所以需要通過elem方法獲得該指標物件對應的值物件(此物件基本等價於原始物件,在其上的修改也回作用到原始物件上),此時的值物件既可以進行set修改值

可以通過value的canset方法判斷,其是否允許修改操作,如

var x float64 = 3.4

v := reflect.valueof(&x)

v = v.elem()

v.setfloat(1.25)

println(v.float())

println(x)

反射修改結構型別

如果value物件是乙個方法物件,則可以通過call方法進行呼叫,傳遞引數為value型別的slic,代表方法形參,函式返回值也是一組value物件slice

需要注意的是,結構型別的成員(結構內與結構外),只有以大寫字母開頭的字段或者方法,才能被反射呼叫和修改,大寫開頭的字段代表為公開字段,否則代表不能反射修改的字段

func (v value) call(in value) value 

func(a a) read()

func main(),

num: 9, }

v := reflect.valueof(&a).elem()

println(v.numfield())// 2

v.field(0).call(nil) //call innerfunc

v.method(0).call(nil) //call read

println(v.field(1).int()) //9

v.field(1).setint(0)

println(v.field(1).int()) //0

}

golang中的管道型別經常用於協程的協調上,select可以實現對管道事件的監控,在對應事件觸發時,執行對應事件(其會在沒有管道事件觸發時阻塞,直到監聽的管道事件之一觸發的時候喚醒執行對應事件),比如

//ch1和ch2都是chan型別

select

Golang學習筆記 四 資料型別

go語言內建了豐富的資料型別,主要分為四類,基礎資料型別 復合資料型別,引用資料型別及介面資料型別,另外,在這些型別的基礎,也支援我們根據自己的資料型別,這就為我們編寫 提供很大的便利性。這一節,我們先學一下基礎資料型別中的整數型別。整數型別分兩種,有符號 int8,int16,int32,int6...

Golang學習筆記

如果乙個method的receiver是 t,你可以在乙個t型別的例項變數v上面呼叫這個method,而不需要 v去呼叫這個method 即不需要 v method 如果乙個method的receiver是t,你可以在乙個 t型別的變數p上呼叫這個method,而不需要 p去呼叫這個method。i...

golang學習筆記

與c語法不同之處 1.引數列表中各個引數型別相同時可以只寫出最後乙個,如 add x,y int int 2.型別在引數名 變數 函式 後面 3.函式的左大括號要跟函式名同一行,否則編譯不過 4.函式定義要先寫關鍵字func在函式開頭 函式外的每個語句都要以func var等等關鍵字開頭 5.在包或...