在本節(jié)中,您將添加通用函數(shù)調(diào)用的修改版本,進(jìn)行小的更改以簡(jiǎn)化調(diào)用代碼。您將刪除在這種情況下不需要的類型參數(shù)。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鐵鋒網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式鐵鋒網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鐵鋒地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
當(dāng) Go 編譯器可以推斷您要使用的類型時(shí),您可以在調(diào)用代碼中省略類型參數(shù)。編譯器從函數(shù)參數(shù)的類型推斷類型參數(shù)。
請(qǐng)注意,這并不總是可能的。例如,如果您需要調(diào)用沒有參數(shù)的泛型函數(shù),則需要在函數(shù)調(diào)用中包含類型參數(shù)。
在 main.go 中,在您已有的代碼下方,粘貼以下代碼。
在此代碼中:
(1)調(diào)用泛型函數(shù),省略類型參數(shù)。
從包含 main.go 的目錄中的命令行,運(yùn)行代碼。
接下來,您將通過將整數(shù)和浮點(diǎn)數(shù)的并集捕獲到您可以重用的類型約束(例如從其他代碼中)來進(jìn)一步簡(jiǎn)化函數(shù)。
正如您將在本節(jié)中看到的,約束接口也可以引用特定類型。
1、編寫代碼
在此代碼中:
b.在您已有的函數(shù)下方,粘貼以下通用 SumNumbers函數(shù)。
在此代碼中:
c.在 main.go 中,在您已有的代碼下方,粘貼以下代碼。
在此代碼中:
(1)調(diào)用SumNumbers打印每個(gè)map的總和。
與上一節(jié)一樣,在調(diào)用泛型函數(shù)時(shí)省略了類型參數(shù)(方括號(hào)中的類型名稱)。Go 編譯器可以從其他參數(shù)推斷類型參數(shù)。
從包含 main.go 的目錄中的命令行,運(yùn)行代碼。
做得很好!您剛剛學(xué)習(xí)了 Go 中的泛型。
剛?cè)腴TGo語(yǔ)言小白需要注意以下五點(diǎn):
1、注意書寫代碼的一些規(guī)范吧,特別是注意大小寫、英文標(biāo)點(diǎn)符號(hào)區(qū)別等,在特別的位置寫上注釋。
2、主要是理解偽代碼所描述的算法,偽代碼要注意是不能直接運(yùn)行的。
3、注意編譯器版本與書籍上所介紹版本是否一致,也注意特殊符號(hào),印刷版本可能與實(shí)際不一致。
4、書上的版本和當(dāng)前所用的版本是否一致,有些情況下書上版本在現(xiàn)在來用已經(jīng)過時(shí)了。
5、邏輯走通;給自己信心,其實(shí)起步階段不難的。
首先你應(yīng)該建立一個(gè)WIN32程序項(xiàng)目,而不是控制臺(tái)項(xiàng)目。在添加這些代碼:#include#include#include#include#definepi3.1415LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函數(shù)說明//--------------------以下初始化窗口類-----------------//intWINAPIWinMain(HINSTANCEhInstance,//WinMain函數(shù)說明HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow){HWNDhwnd;MSGMsg;WNDCLASSwndclass;charlpszClassName[]="窗口";//窗口類名charlpszTitle[]="窗口示例程序";//窗口標(biāo)題名//窗口類的定義wndclass.style=0;//窗口類型為默認(rèn)類型wndclass.lpfnWndProc=WndProc;//窗口處理函數(shù)為WndProcwndclass.cbClsExtra=0;//窗口類無(wú)擴(kuò)展wndclass.cbWndExtra=0;//窗口實(shí)例無(wú)擴(kuò)展wndclass.hInstance=hInstance;//當(dāng)前實(shí)例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//使用默認(rèn)圖標(biāo)wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭頭光標(biāo)wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景為白色wndclass.lpszMenuName=NULL;//窗口中無(wú)菜單wndclass.lpszClassName=lpszClassName;//窗口類名為“窗口示例”//--------------------以下進(jìn)行窗口類的注冊(cè)-------------if(!RegisterClass(wndclass))//若注冊(cè)失敗則發(fā)出警告聲音{MessageBeep(0);returnFALSE;}//創(chuàng)建窗口操作hwnd=CreateWindow(lpszClassName,//窗口類名lpszTitle,//窗口實(shí)例的標(biāo)題名WS_OVERLAPPEDWINDOW,//窗口的風(fēng)格CW_USEDEFAULT,CW_USEDEFAULT,//窗口左上角的坐標(biāo)為默認(rèn)值CW_USEDEFAULT,CW_USEDEFAULT,//窗口的高和寬為默認(rèn)值NULL,//此窗口無(wú)父窗口NULL,//此窗口無(wú)主菜單hInstance,//應(yīng)用程序的當(dāng)前句柄NULL);//不使用該值ShowWindow(hwnd,nCmdShow);//顯示窗口UpdateWindow(hwnd);//繪制用戶區(qū)while(GetMessage(Msg,NULL,0,0))//消息循環(huán){TranslateMessage(Msg);DispatchMessage(Msg);}returnMsg.wParam;//程序終止時(shí)將信息返回系統(tǒng)}//窗口函數(shù)LRESULTCALLBACKWndProc(HWNDhWnd,UINTiMessage,WPARAMwParam,LPARAMlParam){switch(iMessage){//此處添加消息處理代碼}switch(iMessage){caseWM_DESTROY:PostQuitMessage(0);//調(diào)用該函數(shù)發(fā)出WM_QUIT消息default:returnDefWindowProc(hWnd,iMessage,wParam,lParam);}return0;}
/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"#include"ctype.h"intn=0;charrecord[20];floatproduct();floatchange();floatmuli(){floatsumm;summ=product();while(record[n]=='-'||record[n]=='+'){switch(record[n]){case'+':n++;summ+=product();break;case'-':n++;summ-=product();break;}}returnsumm;}floatproduct(){floatsump;sump=change();while(record[n]=='*'||record[n]=='/'){switch(record[n]){case'*':n++;sump*=change();break;case'/':n++;sump/=change();break;}}returnsump;}floatchange(){floatsumc;charrec[20],i=0;if(record[n]=='('){n++;sumc=muli();}if(record[n]==')')n++;while(isdigit(record[n])||record[n]=='.'){while(isdigit(record[n])||record[n]=='.')rec[i++]=record[n++];rec[i]='\0';sumc=atof(rec);}returnsumc;}voidmain(){while(1){n=0;scanf("%s",record);printf("%s=%g\n",record,muli());}}這個(gè)是比較簡(jiǎn)單的。。。但是有點(diǎn)難理解。。。不過運(yùn)行絕對(duì)正確。。還支持括號(hào)。。。但是在這個(gè)程序里面我加沒有出錯(cuò)處理。。。另一種方法是用棧寫。。。這個(gè)好理解。。但是麻煩。。。