成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實測ChatGPT的Go能力!資深老鳥干貨分享:使用ChatGPT學習Go語言容易得多 原創

發布于 2024-5-11 14:01
瀏覽
0收藏

編譯 | 伊風

出品 | 51CTO技術棧(微信號:blog51cto)

編者按:資深開發者詹姆斯·拉米雷茲長文分享,講述了他使用ChatGPT學習Go語言,導航Kolide API并構建復雜的Steampipe插件的經驗。在這個過程中,他深化了對AI輔助編程的認識。

開發者(包括我自己在內)更喜歡邊做邊學。這是我與LLM合作的指導原則之一,也可以說是最重要的一項:因為你在面向任務的教學時刻中獲取知識,學習不是前瞻性的——它是即時的和可觸摸的。

當一位經驗豐富的開發者與LLM合作時,它的機器智能支持和增強了你的人類智能。

對我來說,好處是顯而易見的。在LLM時代為Steampipe編寫ODBC插件感覺比我之前沒有這種幫助時要容易得多。但這顯然是一個主觀評價,因此我在尋找一個機會與另一位插件開發者比較筆記時,詹姆斯·拉米雷茲在我們社區的Slack中宣布為Kolide API構建了一個新插件。

我邀請他告訴我他構建插件的經驗,他很慷慨地和我一起進行了一次長時間的與ChatGPT的對話,他在對話中熟悉了三個新的技術知識領域:Kolide API、Go語言和Steampipe插件架構。

作為一個額外的挑戰:雖然插件開發者通常會為他們的插件目標API找到合適的Go SDK,但這里并非如此。因此,需要為Kolide API創建一個Go包裝器,然后將其集成到插件中。          

1、測試ChatGPT的Go能力

詹姆斯開始進行一些熱身練習。首先,為了測試ChatGPT的Go能力,他提供了一對他編寫的調用相關API /devices/ 和 /devices/ID 的Go函數,并要求對其進行重構,以隔離在兩者之間共享邏輯。

接下來,他探索了使用簡單的可變參數與更復雜的函數選項模式來處理函數的可選參數,并確定簡單的方法——使用一個Search結構的切片來封裝Kolide的查詢參數的字段/運算符/值樣式——就足夠了。他要求一個函數來將該Search結構的切片序列化為一個REST URL,然后完善了ChatGPT提出的版本,創建了一個最終的serializeSearches,增加了對將友好名稱映射到參數并使用字符串構建器的支持。

其中一些改進,,包括使用字符串構建器,都是由一個名為CodeRabbit的AI驅動的機器人提出的,它提供了有用的代碼審查。他說,這種反饋有助于你和你的團隊專注于大局,因為它處理了細節,并經常(雖然不總是)提供可提交的建議。

它還采取了更廣泛的視角來總結拉取請求,并評估關閉的PR是否解決了其鏈接問題中陳述的目標。

2、映射運算符

詹姆斯繼續探討如何將Steampipe運算符(如QualOperatorEqual)映射到Kolide運算符(如Equals)。在這里,ChatGPT建議的方法也被證明是一種應該丟棄的方法,完全可以采用一個更干凈簡單的方法。

但正如詹姆斯在我們的采訪中確認的那樣,由于你最終會對可拋棄的版本進行迭代,因此能夠生成合理的迭代而不是手工編寫它們會很有幫助。在這個過程中,他正在學習基本的Go習慣用法。

詹姆斯:

Go中有do-while循環嗎?

ChatGPT:

沒有,但是……

詹姆斯:

Go中有三元運算符嗎?

ChatGPT:

沒有,但是……

詹姆斯:

如何將內容附加到map[string]string?

ChatGPT:   

像這樣……

3、通過反射增強的訪問者模式

在消化了基礎知識并為Kolide API開發了一個Go客戶端之后,詹姆斯準備著手處理插件開發的真正工作:定義表,將從API包裝器返回的Go類型映射到管理對這些表的SQL查詢的Steampipe模式。

像所有的插件開發者一樣,他從一個可以列出一組資源的表開始,然后通過添加過濾器和分頁來增強它。在添加了第二個表之后,是時候考慮如何抽象出常見的模式和行為了。最終的結果是對訪問者模式的一種優雅實現。這里是對應于表kolide_device和kolide_issue的Steampipe List函數。

實測ChatGPT的Go能力!資深老鳥干貨分享:使用ChatGPT學習Go語言容易得多-AI.x社區圖片

這是所有插件表都使用的通用listAnything函數。

實測ChatGPT的Go能力!資深老鳥干貨分享:使用ChatGPT學習Go語言容易得多-AI.x社區圖片

通過這種設置,向插件添加一個新表幾乎完全是聲明性的:你只需要定義模式,以及形成在SQL查詢中的where(或join)子句和API級別過濾器之間的橋梁的KeyColumns和相關運算符。

然后,你編寫一個小的List函數,定義一個訪問者,并將其傳遞給通用的listAnything函數,該函數封裝了查詢參數的編組、連接到API客戶端、調用API、將響應解包成一個集合,并對集合進行迭代以將項目流式傳輸到Steampipe的外部數據包裝器。

詹姆斯使用ChatGPT啟動了Go中訪問者模式的習慣實現。這意味著學習如何為訪問者函數定義一個類型,然后聲明一個函數來滿足該類型。   

每個表的訪問者封裝了對API客戶端的調用,并返回一個接口。這都相當通用,但是訪問者的響應是特定于包裝的API響應的Go類型,這意味著必須為每個表編寫一個不同的List函數。如何避免這種情況?詹姆斯問道:“res變量上的字段引用需要是在執行時指定的可變類型。你能提出一個方法嗎?”

ChatGPT的建議是使用反射,以便像listAnything(ctx, d, h, “kolide_device.listDevices”, visitor, “Devices”)這樣的調用可以傳遞一個名稱(“Devices”),該名稱使listAnything能夠以一種與類型無關的方式訪問響應結構的字段,例如這里的Devices字段。詹姆斯接受了這個建議。

實測ChatGPT的Go能力!資深老鳥干貨分享:使用ChatGPT學習Go語言容易得多-AI.x社區圖片

有了這個,listAnything終于名副其實地成為了一個完全通用的Steampipe List函數。這個解決方案節省了反射的使用,并保留了Go在API層和Steampipe層中的強類型檢查。

4、LLM協助到底意味著什么?

這絕對不意味著一個LLM在回答類似“請為Kolide API創建Steampipe插件”這樣的提示時編寫了一個體現復雜設計模式的插件。

對我來說,以及對詹姆斯來說,大模型輔助編程意味著更有趣的事情:“讓我們討論一下為Kolide API編寫插件的過程。”這就像與一個橡皮鴨交談,以便大聲思考需求和策略(編者注:“橡皮鴨”(Rubber Duck Debugging)是一個流行的術語,它指的是一種調試技術,其中開發者通過向一個假想的聽眾(在這個比喻中是一只橡皮鴨)解釋他們的代碼來解決問題)。LLM正是一個會回答的橡皮鴨。   

有時候,回答是直接適用的,有時候不是,但無論如何,它們通常可以幫助你更清晰地思考。

作為一名具有廣泛經驗的高級軟件工程師,詹姆斯本來可以自己解決這個問題,但這可能需要更長的時間。他本來會花費大量的時間閱讀文章和文檔,而不是通過實踐學習。而且可能沒有那么多的時間!正如我現在從許多其他人那里聽到的,LLM提供的加速往往是有了一個想法和能夠執行它之間的差異。

詹姆斯還提到了一個我沒有考慮過的開源角度。在LLM之前,他不會完全以公開方式進行這項工作。“我會一直保持私密,直到我感覺更自信,”他說,“但這一次從一開始就是公開的,我很高興它能夠公開。”這使得與Turbot團隊更早地而不是更晚地進行接觸成為可能。

這不是一個自動化的故事,而是一個增強的故事。當像詹姆斯·拉米雷茲這樣經驗豐富的開發者與LLM合作時,它的機器智能支持和增強了他的人類智能。兩者共同努力——不僅僅是為了編寫代碼,更重要的是為了思考架構和設計。

本文轉載自??51CTO技術棧??,作者:伊風


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 亚洲精品福利在线 | 欧美成人专区 | 成人午夜在线视频 | 久久天天综合 | av在线免费观看网址 | 国产精品无 | 91综合网| 精品国产一级片 | 精品一区久久 | 一区二区在线不卡 | 91在线视频观看 | 久久久精品| 成人精品一区二区三区中文字幕 | 国产精品一区二区久久久久 | 日韩精品无码一区二区三区 | 欧美在线免费 | 久久久久久久久99 | 亚洲国产成人av好男人在线观看 | 999久久久免费精品国产 | 国产精品日韩一区二区 | 欧美一区2区三区4区公司二百 | 久久综合香蕉 | 日日干天天操 | 国产精品久久久久久久久久软件 | 久久久精 | 黄色永久免费 | 一本在线 | 久久久日韩精品一区二区三区 | 日本一区二区高清不卡 | 日韩av一区二区在线观看 | 91av视频 | 在线午夜| 国产精品久久国产精品久久 | 在线观看中文视频 | xx视频在线观看 | 国产 91 视频 | 中文字幕视频一区二区 | 欧美第一页 | 99精品电影| 国产一区二区三区高清 | 日韩久草 |