Golang 基礎 防備忘

2021-10-12 18:53:55 字數 3455 閱讀 1007

常量

//關於const的用法

const obj1 string

="cjs"

const obj2 =

"nb"

//也可把tped去掉,系統會自動識別型別

const

( sunday =

7 monday =

1 tuesday =

2 wednesday =

3 thursday =

4 friday =

5 saturday =6)

//關於iota的用法,有點複雜,使用的時候,先進行測試

//以後可以使用iota,優雅的解決很多問題

const

( sunday =

7 monday =

iota

//1 tuesday //2

wednesday //3

thursday //4

friday //5

saturday //6

)

變數定義
var a,b int

var c string

或者var

(//這種寫法一般用於宣告全域性變數

a int

//初始化為0

b string

//初始為空字串

c float64

//初始化為0.0

d bool

//初始化為flase

)

變數初始化的幾種情況
var a int

=100

var b =

"cjs"

//自動識別型別

var(

c =1 d =

"nb"

)e :=

true

//直接賦值

值型別與引用型別
int、float、bool 和 string

以及 陣列 和 結構體 都屬於值型別

啥是值型別,就是將乙個變數的值可以通過「=」賦值給另乙個變數

注意的是,這裡的陣列也是直接賦值,不用乙個乙個傳

指標、切片、map、channel都屬於引用型別

init函式
變數除了可以在全域性宣告中初始化,也可以在 init 函式中初始化。

這是一類非常特殊的函式,它不能夠被人為呼叫,而是在每個包完成初始化後自動執行,

並且執行優先順序比 main 函式高。

每個原始檔都只能包含乙個 init 函式。初始化總是以單執行緒執行,並且按照包的依賴關係順序執行。

package trans

import

"math"

var pi float64

func

init()

go中的數字型別
整型

int 和 uint

在 32 位作業系統上,它們均使用 32 位(4 個位元組),

在 64 位作業系統上,它們均使用 64 位(8 個位元組)。

uintptr 的長度被設定為足夠存放乙個指標即可。

整數:int8(-

128-

>

127)

int16(-

32768

->

32767)

int32(-2,

147,

483,

648-

>2,

147,

483,

647)

int64(-9,

223,

372,

036,

854,

775,

808-

>9,

223,

372,

036,

854,

775,

807)

無符號整數:

uint8(0

->

255)

uint16(0

->65,

535)

uint32(0

->4,

294,

967,

295)

uint64(0

->18,

446,

744,

073,

709,

551,

615)

浮點型go是沒有float型別的,也沒有double型別

只有float32和float64型別

盡可能的使用float64型別,因為math、庫里都是flaot64型別

go 中不允許不同型別之間的混合使用

一些注意
取餘運算只能作用於整數

++、--只能用於字尾,且只能作為單獨語句,不能作為表示式

var arr =

100var brr int

arr++

//正確

++arr //錯誤

brr = arr++

//錯誤

fmt.

println

(arr)

fmt.

println

(brr)

型別別名
type tz  int

type st string

型別別名,得到的新型別,並非和原型別完全相同

字元型別
嚴格來說,這並不是 go 語言的乙個型別,字元只是整數的特殊用例。

byte 型別是 uint8 的別名,對於只占用 1 個位元組的傳統 ascii 編碼的字元來說,完全沒有問題。

例如:var ch byte

='a';字元使用單引號括起來。

迴圈結構
if

-else

類似c語言的用法,

switch

類似c語言的用法,且沒有break

如果想繼續執行後面的內容,***,用fallthrough

forgo語言沒有while 只能用for代替

for有與c語言一樣的用法

fortrue

/或者乙個表示式

for i,x:=

range obj 的用法

這裡注意下,x為接收每乙個裡面的值,這是拷貝,並非引用,改變x的值,不會對原陣列或切點產生變化

break與continue
break只能跳出最內層迴圈

continue 都懂

Golang 介面 防備忘

介面定義其實就是面對物件裡面的多型性,而且比面對物件裡面的更容易理解。介面定義了一組方法 方法集 但是這些方法不包含 實現 它們沒有被實現 它們是抽象的 介面裡也不能包含變數。type namer inte ce 上面的 namer 是乙個 介面型別。按照約定,只包含乙個方法的 介面的名字由方法名加...

Golang陣列 防備忘

沒有新東西,就是整理一遍,加強記憶!最基礎形式var obj 5 intobj 3 99 索引從0開始,可通過下標方式訪問,同c語言定義的同時賦值obj int obj int 這個他媽也是切片 obj 6 int 這三種方式均可 var obj 5 string 給對應的下標賦值,其餘下標資料為空...

Golang 檔案操作 防備忘

檔案概念 上圖中,返回的這個file指標,有三種叫法 檔案物件 檔案指標 檔案控制代碼 都可以 我們在理解的時候,其實file就是乙個指標,這樣更容易理解。檔案的開啟 關閉file,err os.open 路徑 檔名 if err nilerr file.close 檔案關閉 if err nil用...