go-study
package (包)
- 一個目錄下面所有的.go文件的包名必須相同. 包名一般和目錄名相同(是約定, 不是強制), 包名都小寫
- main包是一個特殊的包名, 在main包中, 必須包含func main()函數(shù)
- 導(dǎo)入包(import)的時候, 使用的是包所在目錄的路徑, 路徑中不用包含包的名字, 在使用包的時候,直接用包名(如 fmt.Println)
可見性規(guī)則
當(dāng)標(biāo)識符(包括常量、變量、類型、函數(shù)名、結(jié)構(gòu)字段等等)以一個大寫字母開頭,如:Group1,那么使用這種形式的標(biāo)識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導(dǎo)入這個包),這被稱為導(dǎo)出(像面向?qū)ο笳Z言中的 public);標(biāo)識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內(nèi)部是可見并且可用的(像面向?qū)ο笳Z言中的 private )。
聲明語句
Go語言主要有四種類型的聲明語句:var、const、type和func,分別對應(yīng)變量、常量、類型和函數(shù)實體對象的聲明
函數(shù)
main 和 init 函數(shù)既沒有參數(shù),也沒有返回類型
占位符??https://studygolang.com/articles/2644
- %t? :?布爾類型
- %p?:?指針,?表示為十六進制,并加上前導(dǎo)的0x
- %s?:?字符串
- %c?:?字符
- %b ,?%o ,?%d?:?二進制 ,?八進制 ,?十進制
- %x ,?%X?:?十六進制小寫 ,?十六進制大寫
- %T?:?變量類型
- %v?:?根據(jù)數(shù)據(jù)類型輸出對應(yīng)格式的值
- %%?:?百分號
- %q?:?用引號包含字符串
- %5s , %-5s :?在格式化數(shù)字時,可以在動詞的“%”后面使用一個數(shù)字來控制結(jié)果圖形的寬度和精度。默認為右對齊, 在數(shù)字前面加上"-"可以左對齊
- %06d :?使用0而不是空格填充, 對于數(shù)值類型會把填充的0放在正負號后面
- %3.3f : 浮點數(shù)的寬度和精度
內(nèi)置函數(shù)
- len : 返回某個類型的長度或數(shù)量
- cap
- new
- make
- new 和 make的區(qū)別? https://studygolang.com/articles/1890
數(shù)組
數(shù)組的長度和類型一起構(gòu)成了數(shù)組的類型, 比如 var array?
實現(xiàn)接口 https://www.jianshu.com/p/d87c69ac6ce7
當(dāng)涉及到我們該怎么讓我們的類型實現(xiàn)接口時,Go 語言是特別的一個。Go 語言不需要我們顯式的實現(xiàn)類型的接口。如果一個接口里的所有方法都被我們的類型實現(xiàn)了,那么我們就說該類型實現(xiàn)了該接口。
數(shù)據(jù)類型
- 布爾類型不能接受其他類型的賦值,不支持自動或強制的類型轉(zhuǎn)換
- int和int32在Go語言里被認為是兩種不同的類型
可賦值(這里不能叫類型轉(zhuǎn)換, 用可賦值表達更準(zhǔn)確些)
A value x is assignable to a variable of type T ("x is assignable to T") in any of these cases:
在一下這些情況值x可以賦值給類型為T的變量(x可以賦值給T)
1. x's type is identical to T.
1. x的類型和T的類型相同
2. x's type V and T have identical underlying types and at least one of V or T is not a named type.
2.?x和T具有相同的底層類型, 并且x和T至少有一個是非命名類型
3. T is an interface type and x implements T.
3. T是接口類型,x實現(xiàn)了T
4. x is a bidirectional channel value, T is a channel type, x's type V and T have identical element types, and at least one of V or T is not a named type.
4. x是雙向的chan類型的值, T是chan類型, x和T具有相同的元素類型, 并且x和T至少有一個是非命名類型
5. x is the predeclared identifier nil and T is a pointer, function, slice, map, channel, or interface type.
5. x的值為nil, 并且T是指針、函數(shù)、切片、映射、通道或接口類型
6. x is an untyped constant representable by a value of type T.
6. x是一個沒有指定類型的常量, 可以賦值給類型T(這里要遵循第一條原則, 但數(shù)字類型除外)
?
整型數(shù)據(jù)類型及取值范圍
| 類型 | 字節(jié) | 范圍 |
| int8 | ?1 | ?-128 ~ 127 |
| uint8 | ?1 | ?0 ~ 255 |
| int16 | ?2 | ?-32 768 ~ 32 767 |
| uint16 | ?2 | ?0 ~ 65 535 |
| int32 | ?4 | ?-2 147 483 648 ~ 2 147 483 647 |
| uint32 | ?4 | ?0 ~ 4 294 967 295 |
| int64 | ?8 | ?-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
| uint64 | ?8 | ?0 ~ 18 446 744 073 709 551 615 |
| int | 平臺相關(guān)? | ?平臺相關(guān) |
| uint | 平臺相關(guān)? | 平臺相關(guān)? |
| uintptr | ?同指針 | 在32位平臺下為4字節(jié),64位平臺下為8字節(jié) |
?
goroutine/channel
- goroutine是Go語言中的輕量級線程實現(xiàn),由Go運行時(runtime)管理
- 函數(shù)調(diào)用前加上go關(guān)鍵字,這次調(diào)用就會在一個新的goroutine中并發(fā)執(zhí)行。當(dāng)被調(diào)用的函數(shù)返回時,這個goroutine也自動結(jié)束了。需要注意的是,如果這個函數(shù)有返回值,那么這個返回值會被丟棄。
- 在沒有使用channel時,? Go程序從初始化main package并執(zhí)行main()函數(shù)開始,當(dāng)main()函數(shù)返回時,程序退出,且程序并不等待其他goroutine(非主goroutine)結(jié)束。
- 在向channel中寫入數(shù)據(jù)前, 對channel的讀操作是阻塞的, 讀channel的位置就是同步goroutine的位置
?
總結(jié)
- 上一篇: HttpServletRequest中获
- 下一篇: 代数式的书写规范八种_中考数学一轮复习-