使用 VS Code 和 Delve 调试 Go

我最喜欢的代码编辑器是来自微软的 VS Code。在过去的20年里,我使用过许多编辑器,但这是迄今为止最好的。 VS Code 是开源的,即使在我的不太新的 MacBook Pro 上也很快,它从不在进行中崩溃,它可以自定义扩展,但开箱即用效果也很好。 这一切都很棒,但是如何调试 Go 程序呢?你可能认为需要一个笨重的 IDE,但事实并非如此。通过 Delve,由 Derek Parker 开发的工具,调试 Go 程序非常简单。 首先,当然,你需要安装官方的 Go VS Code 扩展,并且确保已配置好 $GOPATH。 安装完成后,在 Linux/Windows 上,你只需要执行命令 Go: Install/Update Tools。在 Mac 上,你需要通过 Brew 下载 Delve,只需要在你喜欢的 Shell(应该是 zsh)中键入 brew install go-delve/delve/delve - 文档中提到了自签名,但 Brew 会替你处理这个问题。 完成后,设置调试器配置。 点击 VS Code 的 调试菜单,点击“开始调试”,或者按下 F5 键。 VS Code 将调试信息放在工作区根目录下的 .vscode/launch.json 文件中。这个文件将会自动生成,并且应该能够直接用于本地调试: { "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "remotePath": "", "port": 2345, "host": "127....

內建LED

Arduino板上有一個小工具: 內建LED。 它在旁邊有個字母L標示。在Arduino Uno板上,它靠近腳位#13: 在Arduino MKR 1010 WiFi板上,它靠近5V輸出腳位: 這個LED通常連接到數字I/O腳位#13上,但在某些板上,如Arduino MKR系列,它連接到腳位#6。 無論如何,你可以使用LED_BUILTIN常數引用正確的腳位,Arduino IDE會根據你編譯的板子正確對應到該腳位。 要使LED亮起來,首先需要在setup()函式中將腳位設置為輸出模式: pinMode(LED_BUILTIN, OUTPUT); 然後可以發送HIGH信號給它: digitalWrite(LED_BUILTIN, HIGH); 或者 digitalWrite(LED_BUILTIN, 1); 下面是一個簡單的程式,將使內建LED每秒閃爍一次: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); }

在 JavaScript 中使用 let vs const

let 和 const,該選擇哪一個呢? 在 JavaScript 中,我們通常使用兩個關鍵字來聲明變量:let 和 const。 什麼時候該使用其中之一? 我總是會首選使用 const。 為什麼呢? 因為 const 保證變量的值無法被重新賦值。 在編程中,我總是認為能給我帶來最小風險的選項是最好的。 我們有大量可能引發問題的東西。 你給予某個事物的權限越大,你就需要承擔更多的責任。 而我們通常並不希望如此。 當然,這是有爭議的,對於我來說,我不希望那樣就足夠了。 如果我使用 let 來聲明變量,我就允許它可以被重新賦值: let number = 0 number = 1 在某些情況下,這是必要的。 如果我希望變量可以被重新賦值,那麼 let 是完美的選擇。 但在80%的情況下,我甚至不希望這個選項存在。我希望編譯器(在 JavaScript 的情況下是解釋器)給我一個錯誤。 這就是為什麼我在聲明變量時總是首選 const,只有在需要允許重新賦值時才切換到 let。

在編程中什麼是神奇數字?

在一些教程、書籍或視頻中,你可能會看到神奇數字這個術語。 那是什麼? 什麼時候一個數字被稱為神奇? 不幸的是,和神奇數字無關的是魔術師。 簡單地說,當一個數字沒有相關含義時,我們稱其為神奇數字。 可能是傳遞給函數的一個未記錄的數字,或者是在你的代碼中聲明的一個數字,可能是由團隊成員添加的,你真的不知道它代表什麼。 如果你對它進行更改會發生什麼?沒人知道。 需要通過實驗來找出結果。 這些數字真的很煩人。在代碼中應該避免使用神奇數字。 可以聲明一個帶有有意義名稱的常量,並使用它來代替神奇數字。 例如: const int PIN_ID = 1; doSomething(PIN_ID); 相比於: doSomething(1); 上述的方式更好,而且自我解釋性更強。

如何以程式方式在 Next.js 中更改路由

在元件中,您可以使用 useRouter 鉤子: import { useRouter } from 'next/router' //... const router = useRouter() router.push('/test') 有時,這是無法做到的,例如當您不在 React 元件中時,可能是在一個實用程式函數中。 在這種情況下,您可以這樣做: import Router from 'next/router' Router.push('/test')

如何估計編程時間

預估建立軟體所需時間的精細藝術 我真的很想告訴大家我如何估計建立軟體專案所需的時間。 在過去的十年中,我已經被問了數百次這個問題。 “我們需要實現這個功能。你需要多長時間?” “請給我一個詳細的概述,這個專案需要多長時間。一個月?兩個月?” “我希望你發布這個。50小時的計費時間夠嗎?” 對於這些問題的答案,通常最多只是一個 賭注。或者只能是 一次躍進的信任,我知道,如果我承諾一個數字,無論實際所需時間短長,這可能都會是我的薪水。 有時候對於長期客戶,我能夠用相超出估計的專案來彌補我所期望完成工作的早期專案,讓客戶知曉。 最終,我只能說 " 我無法估計"。 所以,對於 “我真的很想告訴大家我如何估計建立軟體專案所需的時間” 的答案是:我不行。 但我可以估計,沒有人真正能夠估計 建立軟體所需時間,因為這個領域內部的複雜性會對你產生影響。 “真正的工程師” 會發現這很難承認,但我從來不是你典型的真正工程師類型。 當你作為開發者工作時,估計可能是最困難的事情。 以下是一張很棒的參考表格,當你需要估計一個任務時可以使用。 任務 你的估計 你忘記的 實際所需時間 一個小的錯誤修復 2分鐘 我們需要找到在原始碼中有錯誤的函數,進行git pull,檢查我們是否破壞了其他函數,我們需要添加一些測試,執行測試,修復我們破壞的測試,部署,更新錯誤追踪器 2小時 一個小的功能 2小時 你需要修復代碼中待處理的TODO,並查看為什麼有一個 //don't touch this 註解。你需要仔細進行手動測試,加上瀏覽器測試,並檢查為什麼在Edge上的預期結果未達到預期。哦,我們還需要在文檔中更新所有截圖 10小時 改善端點的性能 10小時 你需要準確的基準測試,用於證明你的新實現方法正確運作,並添加以前不存在的10多個測試,否則你會有破壞數以萬計客戶使用的生產代碼的風險 5天 重寫整個前端代碼 3週 你開始使用你正在實驗的新的 更具可擴展性 框架,而不觸及UI,但你遇到了一整套完全新的問題,這次沒有StackOverflow或Google可以幫助,因為這個框架太新了。你遇到了獨特的問題,你需要雇用該庫的維護者來與你合作,但他已經轉向下一個偉大的事物。同時,UI團隊決定完全重寫界面,2次。在中途時間,產品經理希望將產品微調到稍微不同的產品 12個月 這可能是我們缺乏估計的很好估計,但事實上事情也可能相反:你估計需要5天的事情實際上可能只需1天,因為你發現一切都已經就緒,只需要添加它,所需時間比預期的少得多。 有些人可能會高估,預計他們可能會遇到困難,增加他們認為需要的30%。 團隊專案的估計甚至更困難,我甚至不會嘗試。 那麼該怎麼辦呢? 與其詳細估計,我建議與委托你工作的客戶、老闆或其他人進行持續溝通,每周檢查專案進度。而不是預先設定結束時間。 因為終究這個過程永遠不會結束。

如何使用 VS Code

VS Code(VSCode)是一個功能強大,越來越受歡迎的編輯器。了解VS Code為什麼受歡迎,以及開發人員的主要功能。 介紹 應該轉用VS Code嗎?為什麼? 入門 資源管理器 搜尋 原始碼控制 調試器 擴充功能 終端 命令面板 主題 自定義 其他配置選項 最適合編碼的字體 工作區 編輯 IntelliSense 代碼格式化 錯誤和警告 鍵盤快捷鍵 鍵盤映射 代碼段 擴充功能展示 VS Code命令行界面 解決高CPU使用問題 介紹 從一開始,編輯器就是一個奇特的存在。一些人會竭力捍衛他們選擇的編輯器。在Unix世界中,你會遇到諸如“Emacs vs vi”之類的爭論,而我對於為什麼要花這麼多時間討論一個編輯器的優點和缺點感到好奇。 在過去的幾年中,我使用過很多編輯器和集成開發環境(IDE)。我還記得TextMate,TextWrangler,Espresso,BBEdit,XCode,Coda,Brackets,Sublime Text,Atom,vim和PHPStorm。IDE和編輯器之間的區別主要在於功能集和複雜性。 相對於IDE,我更喜歡使用編輯器,因為它更快速且不會妨礙工作。在過去的12個月中,我一直在使用VS Code,這是微軟開源的編輯器,它迅速成為我最喜歡的編輯器。 應該轉用VS Code嗎?為什麼? 如果你想知道是否應該使用VS Code,讓我說,是的,你應該從你目前使用的其他編輯器中切換到VS Code。 這個編輯器基於微軟幾十年的編輯器經驗而建立。 該編輯器的代碼完全是開源的,並且使用它無需支付費用。 它使用Electron作為基礎,使其能夠跨平台運行在Mac、Windows和Linux上。它使用Node.js構建,並且可以使用JavaScript進行擴展(這對於開發者而言是一個優勝)。 它非常快速,在使用Sublime Text之後,它是我使用過的最快速的編輯器。 它贏得了社區的熱情追捧:有數千個擴展,一些是官方的,一些是由社區製作的,而且它在調查中也名列前茅。 微軟每個月都會發布新版本。頻繁的更新促進創新,微軟正在聆聽用戶的需求,同時保持平台盡可能穩定(在我使用VS Code的一年中,幾乎每天使用它,我從未遇到過任何問題)。 入門 VS Code的主頁是https://code.visualstudio.com/。 訪問該網站下載該編輯器的最新穩定版本。 安裝過程取決於該平台,你應該已經熟悉了。 當你第一次啟動編輯器時,你將看到歡迎畫面: 左側的工具欄上有5個圖標,它們提供: 文件總管 搜索 原始碼控制 調試器 擴充功能 資源管理器 讓我們從資源管理器(播音註)開始探索。 按下側邊欄的“打開文件夾”按鈕,或者在歡迎頁面上點擊“打開文件夾…”鏈接。這兩者都會打開文件選擇器視圖。 選擇一個包含源代碼(甚至只是文本文件)的文件夾,然後打開它。 VS Code將在視圖中顯示該文件夾的內容: 右邊的空視圖顯示了一些快速操作和它們的鍵盤快捷鍵。...

如何創建你的第一個Go程式

在Go程式語言介紹之後,我們準備好創建我們的第一個Go程式了! 在程式設計師的傳統中,第一個程式會在執行時將「Hello, World!」字串列印到終端機上。因此,我們將首先執行這個動作,然後解釋如何實現它。 也許你的家目錄中有一個資料夾,用於存放所有的程式設計專案和測試。 在該資料夾中創建一個新的資料夾,例如命名為 hello。 在 hello 資料夾中創建一個 hello.go 檔案(檔名可以任意命名)。 將以下內容添加到檔案中: package main import "fmt" func main() { fmt.Println("Hello, World!") } 這是你的第一個Go程式! 讓我們逐行分析這個程式: package main 我們將Go程式組織成封包(package)。 每個 .go 檔案首先聲明它屬於哪個封包。 一個封包可以由多個檔案組成,也可以只有一個檔案。 一個程式可以包含多個封包。 main 封包是程式的入口點,用於識別一個可執行程式。 import "fmt" 我們使用 import 關鍵字來引入一個封包。 fmt 是Go語言提供的內建封包,提供了輸入輸出的實用函數。 我們擁有一個豐富的標準函式庫可供使用,可以用於各種功能,如網路連接、數學、加密、影像處理、檔案系統存取等等。 你可以在官方文件中閱讀這個 fmt 封包所提供的所有功能。 func main() { } 在這裡,我們聲明了 main() 函數。 什麼是函數?我們稍後會更詳細地介紹,暫時可以這樣說,函數是一塊被賦予名稱並包含一些指令的程式碼區塊。 main 函數是特殊的,因為程式的執行從這裡開始。 在這個簡單的情況下,我們只有一個函數,程式從這裡開始執行,然後結束。 fmt.Println("Hello, World!") 這是我們定義的函數的內容。 我們呼叫了之前引入的 fmt 封包中定義的 Println() 函數,並將一個字串作為參數傳遞給它。 根據官方文件的說明,這個函數「根據格式指定符進行格式化並將結果寫入標準輸出」。 請查看文檔,因為它們非常棒。它們甚至還有可以執行的示例: 我們使用「點」語法 fmt.Println() 來指定該函數是由該封包提供的。 程式執行完 main 函數後,就沒有其他事情可做,執行結束。

如何在C中檢查字符值

學習如何在C中檢查字符值 在C中工作時,我們可以使用ctype.h標準函式庫的一組函式來檢查char類型變量的值。 我們可以使用以下幾個有用的檢查: isalnum() 檢查字符是否是字母或數字 isalpha() 檢查字符是否是字母 iscntrl() 檢查字符是否是控制字符 isdigit() 檢查字符是否是數字 isgraph() 檢查字符是否是可打印的ASCII字符(但不包括空格) islower() 檢查字符是否是小寫字母 isprint() 檢查字符是否是可打印的ASCII字符 ispunct() 檢查字符是否是標點字符(可打印的字符,不包括空格和字母數字) isspace() 檢查字符是否是空白字符(請參閱後面的更多內容) isupper() 檢查字符是否是大寫字母 isxdigit() 檢查字符是否是十六進制數字(0-F) 我提到isspace()函式可以檢查字符是否是空白字符。什麼是空白字符? 水平制表符(HT),'\t',ASCII表的第9個字符 垂直制表符(VT),'\v',ASCII表的第11個字符 換頁(FF),'\f',ASCII表的第12個字符 歸位符(CR),'\r',ASCII表的第13個字符 空格,' ',ASCII表的第32個字符 換行,'\n'

如何解決最常見的「學習編程」問題

學習編程是很難的。特別是在今天這個快速變化的世界中,事物似乎在您能趕上速度之前就已經不斷變動。 以下是一些我每天在幫助學習編程的人時經常遇到的常見問題,沒有特定的順序。 認為編程對您來說太難。編程確實很難。但是讓我告訴您,如果我能學會編程,那麼您也能。這是一個陡峭的學習曲線,就像您做的任何事情一樣。但是繼續創建項目,繼續學習,您會成功的。不要氣餒,我們都曾經處於這種困境中。 盲目追隨最新潮流。網絡是一個狂野的地方,每個人都在試圖推銷自己或自己的作品。您在網絡上看到的許多「受歡迎」的開發人員其實更像是「內容創作者」或培訓師、教師。他們需要時刻跟上新事物,因為這是他們的工作。作為一個初學者開發人員,您需要從基礎工具的堅實基礎開始,不要被最新的流行框架所分散注意力。 不斷改變學習內容。掌握工具需要很多時間,而從一種語言跳到另一種語言對學習進度沒有好處。選擇一個專業領域,從基礎知識開始,保持專注。與其了解8種不同語言的10%,不如了解一種語言的80%。 認為您需要記憶所有內容。讓我告訴您,我一直在使用 Google。我記性很差。有時我會找到我過去寫過的帖子,裡面有我問題的答案。記憶是為學校而設計的。這不是學校。您需要學習的是過程、工作原理以及如何構建事物。然後,您可以利用所有的書籍、網站和搜索引擎來幫助您解決其他問題。 認為編程是一種獨立的活動。程序員是一個大社區。當然,我們可能整天盯著電腦工作或遠程工作,但有各種各樣的聚會、會議、虛擬或現實世界的交流方式,還有 Twitter、Discord 等等。尋找一個社區,交朋友,找到和您有相同問題的同行。每個人都樂意互相幫助。找到當地的夥伴會更加有趣!