go語言 8 語言陷阱

2021-10-04 08:32:02 字數 1125 閱讀 2107

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這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...