go語言是一種編譯型語言
gopath是乙個環境變數,用來表明你寫的go專案的存放路徑(工作目錄)。
變數名:gopath 值:g:\go
gopath路徑最好只設定乙個,所有的專案**都放到gopath的src目錄下
我在g盤新建乙個go的工作目錄,在該目錄下新建三個目錄
bin:用來存放編譯後生成的可執行檔案
pkg:用來存放編譯後生成的歸檔檔案
src:用來存放原始碼檔案
適合企業開發者的go專案結構
go採用的是utf-8編碼的文字檔案存放源**,理論上使用任何一款文字編輯器都可以做go語言開發,這裡推薦使用vs code和goland。 vs code是微軟開源的編輯器,而goland是jetbrains出品的付費ide。
第乙個go程式package main // 宣告 main 包,表明當前屬於哪個包,
// 包內元素共享,大寫字母開頭的變數可以被外部匯入
// go語言,單引號表示字元,雙引號表示字串
import
"fmt"
// 匯入內建 fmt 包
func
main()
進入對應的目錄或者直接右鍵單擊檔案,選擇在終端開啟:go + 檔案路徑:
絕對路徑:
相對路徑:相對的是當前路徑
go + 專案路徑:
絕對路徑:
相對路徑:相對的是src
go run main.go # 編譯並執行,但不儲存編譯結果
go build # 編譯會生成乙個.exe檔案,結果放在當前路徑下
直接在命令列執行,會列印:hello world!
go build -o heiheihei.exe # -o可以指定編譯後檔案的路徑和名字
go install
# 編譯的是可執行專案:結果放在bin下
# 編譯的是非可執行:結果放在pkg下
go fmt # **格式化
編譯後放到linux執行# 只需要指定目標作業系統的平台和處理器架構即可:
set cgo_enabled=
0// 禁用cgo
set goos=linux // 目標平台是linux
set goarch=amd64 // 目標處理器架構是amd64
# 然後執行:go build
即可編譯成乙個二進位制檔案
如果切換回windowsset cgo_enabled=0
set goos=darwin
set goarch=amd64
go build
注釋://單行注釋
/*多行注釋
所有的功能都是通過導包的形式呼叫的。
導的包必須使用,不然會報錯
*/
區域性變數定義完之後,一定得使用,否則會報錯
// 宣告變數:如果宣告的變數在後面的**沒有使用會報錯
var 變數名 變數型別(int
,float64
,bool
,string)
// 批量宣告
var(
a string
b int
c bool
)// 變數賦值:需要事先宣告好
a ="上海"
b =100
c =true
// 宣告與賦值放一起
var x string
="李一桐"
// 字串拼接
fmt.
printf
("%s哈哈哈%d"
, x, b)
//printf:列印格式化
%s:字串
%d:整型
%f:浮點型
%b:二進位制
%x:十六進製制
%o:八進位制
//短變數型別:只能在函式內部使用
func
main()
// 型別推導:有時我們在宣告變數時,忽略了型別,編譯器會根據等號右邊的值來推導變數的型別完成初始化
var name =
"李一桐"
var age =
24// 匿名變數
// 先定義乙個有返回值的函式
func
foo()(
string
,int
)func
main()
// 不能重複宣告同名變數,以下宣告會報錯
var name =
"aaa"
var name =
"aaa"
常量:記憶體的讀寫許可權只是可讀
// go語言的常量通過 const 關鍵字來宣告
const pi =
3.1415
const e =
2.7182
//宣告了這兩個常量以後,在整個程式執行期間,它們的值都不能再發生變化了
const a,b,c =
100,
false
,"xiaoli"
fmt.
println
(a,b,c)
// 多個常量可以一起宣告:常量組
const
( pi =
3.1415
e =2.7182
)// const同時宣告多個常量時,如果忽略了值則表示和上面一行的值相同
const
( n1 =
100 n2 //100
n3 //100
)// iota:列舉,只能在常量的表示式中使用
// 1、iota在const關鍵字出現時將被重置為0。
// 2、const中每新增一行常量宣告將使iota計數一次(iota可理解為const語句塊中的行索引)。 使用iota能簡化定義,在定義列舉時很有用。
// 3、iota可以參與運算
// 4、iota的中斷和恢復
// 5、多個iota同時使用,單獨計數互不影響
const
( n1 =
iota
//0 n2 //1
n3 //2
n4 //3
)//使用_跳過某些值
const
( n1 =
iota
//0 n2 //1
_ n4 //3
)//iota宣告中間插隊
const
( n1 =
iota
//0 n2 =
100//100,const中每新增一行常量宣告將使iota計數一次
n3 =
iota
//2 n4 //3
)const n5 =
iota
//0//定義數量級 (這裡的《表示左移操作,1<<10表示將1的二進位制表示向左移10位,也就是由1變成了10000000000,也就是十進位制的1024。同理2<<2表示將2的二進位制表示向左移2位,也就是由10變成了1000,也就是十進位制的8。)
const(_
=iota
kb =
1<<(10
*iota
)// 1<<10 ==> 2的10次方
mb =
1<<(10
*iota
)// 1<<20 ==> 1024*1024
gb =
1<<(10
*iota
)// 1<<30
tb =
1<<(10
*iota
)// 1<<40
pb =
1<<(10
*iota
)// 1<<50
)// 多個iota定義在一行
const
( a, b =
iota+1
,iota+2
//iota=0;a=1,b=2
c, d //iota=1;c=2,d=3
e, f //iota=2;e=3,f=4
)
reflect.typeof():列印某個變數的型別
type 自定義型別名 基礎型別
// 例:
type id int
var a id =
1fmt.
println
(a,reflect.
typeof
(a))
注意: 自定義型別和基礎型別不是乙個型別
算數運算,邏輯運算,賦值運算,比較運算,位運算,其它運算
1、算術運算子
// 算術運算子的坑
1、變數的型別是確定死的
2、2這樣的整型數字會自動轉換成浮點型
3、2.0這樣的浮點型數字會被自動轉換成整型
4、同型別之間才能進行運算
func
main()
2、指標
指標就是乙個存放了記憶體位址的變數
*型別:指標型別——變數型別
func
main()
自定義常量類
python定義常量類,兩種方式 1.通過命名風格來提醒使用者該變數表示常量,如常量名為大寫字母,單詞用下劃線連線,這是約定俗稱的方式,其實值是可以改的 2.通過自定義類來實現常量功能,要求必須字母全為大寫,且不可在修改這兩個條件 建立乙個const.py檔案,如下 python 純文字檢視 複製 ...
PHP中的自定義常量與類常量
1.自定義常量 常量的值只能是標量資料 boolean integer float 和 string 或 null 常量一旦被定義,就不能被重新定義或者取消定義。有兩種定義方式 define status 3 如果第三個引數設定為true,則大小寫不敏感 echo status const name...
golang 自定義型別
1.8 自定義型別 可將型別分為命名和未命名兩 大類。命名型別包括 bool int string 等,而 array slice map 等和具體元素型別 長度等有關,屬於未命名型別。具有相同宣告的未命名型別被視為同 一型別。具有相同基型別的指標。具有相同元素型別和 長度的 array。具有相同元...