分享一些为PHPer准备的Go入门知识
下面由Golang語言教程欄目給大家分享一些為PHPer準備的Go入門知識,希望對需要的朋友有所幫助!
最近,我開始為我的工作團隊開發內部命令行界面應用程序。我選擇的主要編程語言是PHP,但是我想用可以在任何平臺上運行的語言創建該程序,而不必安裝解釋器。我還希望該應用程序可以獨立包含在一個二進制文件中,以便于分發和安裝。我下載了Go,對它的易學性和在短時間內獲得的生產力感到驚訝。 Go的程序化編程模型真的很適合我們PHP開發者的思維習慣,我得以快速啟動并運行該應用程序。盡管與PHP有一些明顯的區別,所以我想與想要學習Go的其他PHP開發人員分享這些區別。
推薦:《golang教程》
MacOS
我使用的是 Mac ,所以通過 Homebrew 安裝 go : brew install go 。如果你的 Mac 還沒有安裝 Homebrew ,我強烈建議你使用。
Windows & Linux
Go 的官網有每種操作系統的下載資源,包括針對 Windows 系統的「下一步下一步」的安裝器。
開始
在 Go 里面,所有工程的源代碼都保存在一個目錄:GOPATH。 GOPATH 默認被設置成家目錄下的 go 下面,比如 /Users/andrewdavis/go。GOPATH 下面有 bin 目錄和 src 目錄。bin 目錄存放你下載的二進制形式的依賴 ,你可以將 bin 目錄添加到你的 PATH 環境變量里面。你可以在終端編輯文件 .bashrc/.zshrc ,添加 export PATH=$PATH:$(go env GOPATH)/bin。學習 Golang , 你可以在終端運行命令 go get golang.org/x/tour/gotour 下載 Go編程指南, go get 將下載參數里面指定的第三方依賴的源碼和二進制文件。 現在你可以在終端運行 gotour , 它將啟動一個 web 服務器,并自動打開瀏覽器訪問。
要創建項目,請在GOPATH中的src下創建一個目錄:mkdir -p $GOPATH/src/helloworld。打開這個文件夾cd $GOPATH/src/helloworld并創建一個名為main,touch main.go。在該文件中,輸入以下內容:
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
所有Go程序的起點是主程序包中的主要功能。接下來,你可以跑go run main.go運行程序。您還可以運行go install,程序將被編譯并放在bin目錄中,這樣您就可以在終端中執行helloworld,它將運行您的代碼。
與PHP的主要區別
現在您已經設置了一個項目,您可以開始探索不同的go功能。你會注意到的第一件事是Go中不需要分號。語句的結尾由新行檢測。這里還有一些我花了一些時間才理解的差異:
變量
Go 是一門靜態和強類型語言, 因此每個變量都有分配給它的類型。函數中的變量是使用 := 賦值的, 該運算符將為變量自動分配類型: name := "Andrew" // name 現在是一個字符串. 要創建一個不設置任何數據的變量或者在函數之外創建變量,您必須使用 var 關鍵字: var name string。
If 語句
if語句的工作方式和PHP中是相同的, 但是它不需要用括號包住判斷條件. 這種差異最初讓我在閱讀 Go 的代碼時感到困惑. 但是, 我認為這讓代碼更具可讀性.
package main
import "fmt"
func main() {
value := false
if value {
fmt.Println("Value is true")
} else {
fmt.Println("Value is false")
}
}
Packages vs Namespaces
Go 使用術語 package 來為其內容創建命名空間。如果你的 Go 代碼中有一個名為 controllers 的文件夾,在這個文件夾下的所有文件都需要以 package controllers 開頭。想要在其他包內導入控制器,你需要使用 import "helloworld/controllers"。包內任何以大寫字母開頭的名稱都可以用在其他包中。 如果在 controllers 中有一個名為func HelloWorld () 的函數,你可以在 controllers 導入之后使用 controllers.HelloWorld() 來執行這個函數。任何以小寫字母開頭的名稱只能在包內使用。不需要 private 或 public 進行聲明。
Strings
在 Go 中,所有字符串必須用雙引號包圍。Go 中的一個單引號值代表一個 rune (一個 Unicode字符)。習慣性的,我會使用單引號聲明字符串,因為這是 PHP 中的常見做法。使用雙引號聲明字符串會需要一段時間調整。
var name = "Andrew" var copy = '?'
Structs vs Classes
Go 沒有像 PHP 的 class 語法. 取而代之的, 它使用結構體對自定義數據結構建模. 你可以像下面這樣聲明一個結構體:
package main
type Cup struct {
name string
color string
volume int
}
你可以通過在函數名稱之前引用結構體來為該結構體添加方法。
func (c Cup) nameAndColor() string {
return c.name + ": " + c.color
}
然后您可以通過在結構體名稱后用大括號傳遞其初始值來實例化一個結構體. 使用 . 來調用結構體的方法.
func main() {
c := Cup{name: "Solo", color: "Red", volume: 12}
c.nameAndColor() // 返回 "Solo: Red"
}
若要創建一個方法修改結構體實例, 該方法必須引用指向結構體的指針:
func (c *Cup) crush() {
c.volume = 0
}
錯誤
在 Go 中,錯誤并不會視為異常。沒有 try 或 catch 的機制。作為替代,如果發生錯誤,需要從函數內返回錯誤。Go 支持一個函數返回多個值。如果調用的函數可能會返回錯誤,你必須檢測這個錯誤是否存在,然后處理這個錯誤。
package main
import "fmt"
func GetName(name string) (string, error) {
if name == "Bob" {
return "", fmt.Errorf("Name cannot be Bob")
}
return name, nil
}
func main() {
name, err := GetName("Bob")
if err != nil {
fmt.Println("Uh-oh an error has occurred")
}
}
Final
當然,Go 還有很多東西要學,但是希望這能幫助你更好的開始。學習 Go 的很好的資源有很多。對我最有幫助的是 Go 文檔 和 Go By Example。如果你有任何想法或問題,請留下評論。 謝謝閱讀!
原文地址:https://dev.to/restoreddev/introduction-to-go-for-php-developers-33ko
譯文地址:https://learnku.com/go/t/46321
總結
以上是生活随笔為你收集整理的分享一些为PHPer准备的Go入门知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宝塔挂载新硬盘后如何修改网站根目录
- 下一篇: 你还傻傻分不清Cookie、Sessio