package main
import
"fmt"
//驗證golang return defer 的返回值
func
main()
func
test1()
int(
)defer
func()
()fmt.
println
("test1"
, i,
&i)return i
}func
test2()
(i int)(
)defer
func()
()fmt.
println
("test2"
, i,
&i)return
}
結果:
let's go !!!
test1 0 0xc000088008
i is : 1 0xc000088008
i is : 2 0xc000088008
main1 0 0xc000088000
*************************====
test2 0 0xc000018060
i is : 1 0xc000018060
i is : 2 0xc000018060
main2 2 0xc000018058
通過結果可以得出結論:
1.在test中的i指標和返回給main函式的i指標是不一樣的,其實return是把i進行了一次賦值拷貝返回給main函式。2.test1函式的返回值沒有被提前宣告,return返回值來自於函式內部定義變數(var i int)的賦值,而defer中修改的也是內部定義變數,defer無法直接訪問到返回值,因此函式退出時返回值並沒有被修改。
3.test2函式的返回值(i int)被提前宣告,所以defer可以訪問該返回值,因此在return賦值返回值 i 之後,defer呼叫返回值 i 並進行了修改,返回給main函式的值也就變的跟i一樣。
package main
import
("fmt"
"time"
)//驗證golang return defer 的返回值
func
main()
func
test
(t int64
)
結果:
let's go !!!
main timestamp is : 1597734408
arg timestamp is : 1597734403
test timestamp is : 1597734408
可以看到test函式中arg的時間戳的值比休眠之後的時間戳還小,說明defer test函式方法的引數time.now().unix()是先被呼叫了而不是等到執行defer的時候才呼叫。 RestTemplate返回值中文亂碼問題
目錄問題 排查問題 修改問題 測試 在使用resttemplate 方法 postforentity string url,object request,classresponsetype,object.urivariables 返回的中文亂碼,如下 檢視resttemplate的建構函式,發現st...
JDBC API中的execute返回值問題
jdbc是連線資料庫的基礎,有段時間不用jdbc了,也沒有細緻研究過,今天遇到乙個問題,jdbc中execute的返回值是什麼,這個問題比較複雜.在此之前先普及一下其他兩個方法的知識 1 int executeupdate string sql 可以執行insert,update或delete,返回...
promise 鏈式程式設計then返回值的問題
最近複習promise 物件的時候,發現promise鏈式程式設計時then返回值不太懂的問題,查閱資料後,總結如下 then 的返回值 1.函式return 任意數值 或者 不返回資料 返回ndefined 時,then 方法返回的是乙個狀態為fulfilled狀態的promise物件 2.函式r...