GO是編譯性語言,所以函數的順序是無關緊要的,為了方便閱讀,建議入口函數 main 寫在最前面,其余函數按照功能需要進行排列
我們提供的服務有:成都做網站、網站制作、微信公眾號開發、網站優化、網站認證、襄城ssl等。為上千企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的襄城網站制作公司
GO的函數 不支持嵌套,重載和默認參數
GO的函數 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等
GO的函數用 func 來聲明,且左大括號 { 不能另起一行
一個簡單的示例:
輸出為:
參數:可以傳0個或多個值來供自己用
返回:通過用 return 來進行返回
輸出為:
上面就是一個典型的多參數傳遞與多返回值
對例子的說明:
按值傳遞:是對某個變量進行復制,不能更改原變量的值
引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內存會更少,只有4或8個字節的消耗
在上例中,返回值 (d int, e int, f int) { 是進行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結果都是一樣的,但要注意:
當返回了多個值,我們某些變量不想要,或實際用不到,我們可以使用 _ 來補位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉
在參數后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個可變長度的參數
輸出為:
在上例中, strs ...string 中, strs 的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數的例子,更多一些演變的形式,都非常類似
在GO中 defer 關鍵字非常重要,相當于面相對像中的析構函數,也就是在某個函數執行完成后,GO會自動這個;
如果在多層循環中函數里,都定義了 defer ,那么它的執行順序是先進后出;
當某個函數出現嚴重錯誤時, defer 也會被調用
輸出為
這是一個最簡單的測試了,當然還有更復雜的調用,比如調試程序時,判斷是哪個函數出了問題,完全可以根據 defer 打印出來的內容來進行判斷,非常快速,這種留給你們去實現
一個函數在函數體內自己調用自己我們稱之為遞歸函數,在做遞歸調用時,經常會將內存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調用
本篇重點介紹了GO函數(func)的聲明與使用,下一篇將介紹GO的結構 struct
可以學習黑馬程序員的這個教程
20小時快速入門go語言:網頁鏈接
go語言的優勢
可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。
靜態類型語言,但是有動態語言的感覺,靜態類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率很高。
語言層面支持并發,這個就是Go最大的特色,天生的支持并發。Go就是基因里面支持的并發,可以充分的利用多核,很容易的使用并發。
內置runtime,支持垃圾回收,這屬于動態語言的特性之一吧,雖然目前來說GC(內存垃圾回收機制)不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之后的GC。
簡單易學,Go語言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go關鍵字是25個,但是表達能力很強大,幾乎支持大多數你在其他語言見過的特性:繼承、重載、對象等。
豐富的標準庫,Go目前已經內置了大量的庫,特別是網絡庫非常強大。
內置強大的工具,Go語言里面內置了很多工具鏈,最好的應該是gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難。
跨平臺編譯,如果你寫的Go代碼不包含cgo,那么就可以做到window系統編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統的信息。
內嵌C支持,Go里面也可以直接包含C代碼,利用現有的豐富的C庫。
golang學習比較簡單,不過任何一門語言都不是孤立存在的,在這里簡要說明一下golang開發的學習路線
1.golang基礎,包括go語言安裝,go語言語法,流程控制語句,函數,方法,面向對象概念,網絡編程,并發編程等
2.golang開發框架,包括beego,gin,Iris,Echo等
3.微服務開發
4.深入的話還可以學習算法部分。如果要接觸區塊鏈相關技術的話,還需要學習區塊鏈的加密算法等相關知識
5.如果要結合go實現應用的話,肯定離不開各種數據庫,比如關系型數據庫oracle、mysql,或者各類非關系型數據庫等等
6.如果需要開發界面的話,還需要學習網頁編程如html,javascript,vue,elementUI,bootstrap等網頁開發技術和框架。
7.在以上學習的基礎上還可以向架構方面深入學習。
鏈喬教育在線祝您學有所成。
請自行查看我前面寫得GO語言開發環境和GO語言IDE編輯器的經驗文章
我們先寫一段GO代碼
很簡單就是打印輸出一個hello world!
保存為print.go文件
然后再CMD下一路cd到print.go目錄下來
在cmd下運行 go run print.go就可以運行go程序了
看看運行結果
GO程序的代碼是可以直接編譯成exe文件的
在print.go目錄下運行 go build print.go即可把go程序編譯成exe文件
完成之后看看exe文件是否存在
最好我們要看看運行exe的效果
首先你應該建立一個WIN32程序項目,而不是控制臺項目。在添加這些代碼:#include#include#include#include#definepi3.1415LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函數說明//--------------------以下初始化窗口類-----------------//intWINAPIWinMain(HINSTANCEhInstance,//WinMain函數說明HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow){HWNDhwnd;MSGMsg;WNDCLASSwndclass;charlpszClassName[]="窗口";//窗口類名charlpszTitle[]="窗口示例程序";//窗口標題名//窗口類的定義wndclass.style=0;//窗口類型為默認類型wndclass.lpfnWndProc=WndProc;//窗口處理函數為WndProcwndclass.cbClsExtra=0;//窗口類無擴展wndclass.cbWndExtra=0;//窗口實例無擴展wndclass.hInstance=hInstance;//當前實例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//使用默認圖標wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭頭光標wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景為白色wndclass.lpszMenuName=NULL;//窗口中無菜單wndclass.lpszClassName=lpszClassName;//窗口類名為“窗口示例”//--------------------以下進行窗口類的注冊-------------if(!RegisterClass(wndclass))//若注冊失敗則發出警告聲音{MessageBeep(0);returnFALSE;}//創建窗口操作hwnd=CreateWindow(lpszClassName,//窗口類名lpszTitle,//窗口實例的標題名WS_OVERLAPPEDWINDOW,//窗口的風格CW_USEDEFAULT,CW_USEDEFAULT,//窗口左上角的坐標為默認值CW_USEDEFAULT,CW_USEDEFAULT,//窗口的高和寬為默認值NULL,//此窗口無父窗口NULL,//此窗口無主菜單hInstance,//應用程序的當前句柄NULL);//不使用該值ShowWindow(hwnd,nCmdShow);//顯示窗口UpdateWindow(hwnd);//繪制用戶區while(GetMessage(Msg,NULL,0,0))//消息循環{TranslateMessage(Msg);DispatchMessage(Msg);}returnMsg.wParam;//程序終止時將信息返回系統}//窗口函數LRESULTCALLBACKWndProc(HWNDhWnd,UINTiMessage,WPARAMwParam,LPARAMlParam){switch(iMessage){//此處添加消息處理代碼}switch(iMessage){caseWM_DESTROY:PostQuitMessage(0);//調用該函數發出WM_QUIT消息default:returnDefWindowProc(hWnd,iMessage,wParam,lParam);}return0;}
文章題目:go語言如何寫好,如何學好go語言
當前網址:http://vcdvsql.cn/article12/hspsdc.html
成都網站建設公司_創新互聯,為您提供網站設計公司、網站設計、網站導航、商城網站、靜態網站、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯