x =
int(
)return t
}//呼叫f2返回5,因為defer改變的是新建的t變數的值
funcf1(
)(r int)(
)return0}
//返回1,因為defer修改的r是返回值,所以返回值被修改了
防止陷阱的辦法時f1的返回值不要命名,即去掉r
陣列都是值傳遞。包括
陣列間的直接賦值,
陣列作為函式引數
陣列內嵌到struct中(結構也是值拷貝)
b:=a//修改b的值不影響a,反之一樣
f(a)
//會改變a的值
c :=
struct
d:=c//修改d中陣列元素的值不會影響c
切片底層是三部分組成
指向底層陣列的指標
切片的當前大小len
切片的底層陣列大小cap
當len超過cap時,會申請乙個容量更大的底層陣列,將老陣列複製到新陣列。
空切片不是nil,只是底層陣列大小為0。即len=0,cap=0,指標指向乙個陣列
var a [
]int
//nil
b:=make([
]int,0
)//not nill
go用的都是值拷貝,函式傳遞引數,例項賦值給介面都是值拷貝。
有時值拷貝也能修改變數內容:
傳遞的時指標
引數時復合資料型別,符合資料型別內部由指標型別的元素
復合型別中 chan.map.slice, inte***ce 內部都是通過指標指向具體的資料,這些型別的變數作為函式引數時,實際上相當於指標的副本
略,不重要
引用,即別名
不重要吧,略
編譯器要求:
定義的區域性變數必須使用
import的包必須用
結構控制,函式,方法的
var函式邏輯複雜時,設計兩個「同名函式」,乙個首字母大寫,用於匯出api給外部使用,乙個首字母小寫,用於實現具體邏輯。
用大寫函式呼叫小寫函式,並增加一些功能
將error,bool值放在最後乙個,這是一種程式設計風格。
go語言基礎(8)
package main import fmt type person struct 結構體巢狀結構體 type student struct func main01 101,100 結構體名稱.父類成員資訊 張三 stu.person.name 張三 男 fmt.println stu type ...
8 Go語言 指標型別
1.實際用法package main import fmt func main 執行結果 0xc042052088 0xc0420461b02.從指標獲取指標指向的值 在對普通變數使用 操作符取位址獲得這個變數的指標後,可以對指標使用 操作,也就是指標取值 package main import f...
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...