首頁 常見問題 golang是不是高階語言

golang是不是高階語言

Jul 07, 2023 pm 01:44 PM
golang 高階語言

golang是高級語言,是較接近自然語言和數學公式的編程,基本上脫離了機器的硬體系統,用更易理解的方式編寫程序,它為解決大型系統開發過程中的實際問題而設計,支援並發、規範統一、簡單優雅,性能強大,主要目標是兼具Python等動態語言的開發速度和C/C 等編譯型語言的性能與安全性。

golang是不是高階語言

本教學操作環境:windows 10系統、GO 1.20版本、Dell G3電腦。

go是高階語言。 Go語言是Google公司在2009年開源的高級程式語言,它為解決大型系統開發過程中的實際問題而設計,支援並發、規範統一、簡單優雅,性能強大;它的主要目標是「兼具Python 等動態語言的開發速度與C/C 等編譯型語言的效能與安全性」。

電腦語言具有高階語言和低階語言之分。而高階語言又主要是相對於彙編語言而言的,它是較接近自然語言和數學公式的編程,基本上脫離了機器的硬體系統,用人們更易理解的方式編寫程式。編寫的程式稱之為原始程式。

高階語言並不是特別指的某一種具體的語言,而是包含許多程式語言,如流行的go語言,java,c,c ,C#,pascal,python,lisp,prolog,FoxPro ,易語言,中文版的C語言等等,這些語言的語法、指令格式都不相同。

Go語言是Google公司在2009年開源的高階程式語言,它為解決大型系統開發過程中的實際問題而設計,支援並發、規範統一、簡單優雅,性能強大,被很多Go語言傳道者譽為「雲端運算時代的C語言」。 Go語言的主要目標是「兼具 Python 等動態語言的開發速度和 C/C 等編譯型語言的效能與安全性」。

Go語言有時被描述為“C 類似語言”,或“21 世紀的C語言”。 Go 從C語言繼承了相似的表達式語法、控制流結構、基礎資料型別、呼叫參數傳值、指標等很多思想,還有C語言一直所看中的編譯後機器碼的運作效率以及和現有作業系統的無縫適配。

Go的優缺點程式設計師的心聲:如果現實世界需要我能夠在幾天內對一個生產系統進行原型設計、測試和部署,而且在每秒能處理比原來多5倍請求, CPU和記憶體的開銷還都很小。我想大概只有Go語言可以勝任了。

Go語言有以下優點:

單獨的二進位發布:Go專案編譯會產生一個靜態的可執行檔。該檔案可**運作而不需要其他依賴。這種方式特別適合雲端原生容器環境。

交叉編譯:在任何作業系統上都可以編譯在其他平台上可執行的二進位。例如在Mac系統上可編譯出在Linux和Windows上可執行的二進位。垃圾回收:Go語言支援垃圾回收。相比較,C ,Rust等需要開發者自己控制。執行效能:Go非常的快。性能接近C 。遠高於Java,Python、Node。開發效率:Go語言同時具備靜態語言的運作效能和動態語言的開發效率。

簡單,高效率:Go語言的設計哲學裡就包含了簡單和高效。一個典型的反例就是複雜,臃腫的Java語言。並發性:語言層面支援並發,透過協程和通道簡化並發開發,提高並發效能。

豐富的標準庫:Go標準庫覆蓋了文本,IO,網絡,加密,Web服務,遠端RPC,模板引擎等功能。可呼叫C語言:可以呼叫C語言函數,進一步最佳化效能,復用C語言龐大的生態系。

快速編譯時間:Go的編譯特別快。大家可以參考兩款靜態部落格產生系統,Hexo(Node開發)和Hugo(Go開發)。

工程型:Go語言設計的目的是成為一門工程語言,解決實際的工程問題。 Go語言定義了開發規範,並提供了豐富的工具。使用Go語言可以編寫出容易閱讀和理解,容易測試、維護和擴展的程式。

Go語言有以下缺點:

缺少重量級框架。如Ruby的Rails,Python的Django,Java的Spring。

錯誤處理:沒有異常系統。 Go官方正在解決該問題。

軟體包管理:很長一段時間以來,Go官方都沒有一套軟體包管理體制。直到最近,Go的1.13版本正式引入了Go Module作為官方的依賴管理工具。

不是標準的物件導向的程式設計模型:這個也是Go語言的一個創新。如果你是堅實的OOP的擁護者,可能會有些不適應。

golang高階語法

rune

package main
import "fmt"
//rune相当于go的char  使用utf8编码,中文占3个字节,英文一个字节
func main() {
    s:= "ok我爱你"
    fmt.Println(len(s))    // 11
    fmt.Println(len([]rune(s)))  // 5
    fmt.Println(len([]byte(s)))  // 11
    // str是int32类型
    for i, str := range s {
        fmt.Printf("%d %c", i, str)
        fmt.Println()
    }
    // str是byte类型
    for i, str := range []byte(s) {
        fmt.Printf("%d %x", i, str)
        fmt.Println()
    }
    // str是rune类型
    for i, str := range []rune(s) {
        fmt.Printf("%d %c", i, str)
        fmt.Println()
        }
    }
登入後複製

slice切片

slice的底層是陣列

slice是對陣列的view

slice可以向後擴展,不可以向前擴展

s[i]不可以超過len(s), 向後擴展不可以超越底層數組cap(s)

slice內部維持了3個變量,ptr指針指向slice的第一個元素,len指定了slice的長度,cap指定了slice的容量。

slice進行append時,容量不夠會進行翻倍。

有如下
arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
s2 := s1[3:5]
则
s1值为[2,3,4,5],  len(s1)=4, cap(s1)=6 
s2值为[5,6], len(s2)=2, cap(s2)=3
slice底层是数组
slice可以向后扩展,不可以向前扩展
s[i]不可以超过len(s), 向后扩展不可以超越底层数组cap(s)
登入後複製
接着上题
arr := [...]{0, 1, 2, 3, 4, 5, 6, 7}
s1 := arr[2:6]
s2 := s1[3:5]
s3 := append(s2, 10)
s4 := append(s3, 11)
s5 := append(s4, 12)
则
s1值为[2,3,4,5]
s2值为[5,6]
s3值为[5,6,10]
s4值为[5,6,10,11]
s5值为[5,6,10,11,12]
arr值为[0, 1, 2, 3, 4, 5, 6, 10] 
由于s4和时s5已经超过arr的cap,此时系统会生成一个新的数组,所以s4和s5是对新数组的view,即s4和s5 no longer view arr
登入後複製

添加元素時如果超越cap,系統會重新分配更大的底層數組,原來的數組被拷貝過去,如果原來的數組沒人用則會被gc

#由於值傳遞的關係,必須接受append的回傳值

map

go語言所以型別都有預設值

當map取值的key不存在時,只會傳回預設值,不會報錯。判斷key存不存在用key, ok := m[“key”]

map使用雜湊表,作為map的key必須可以比較相等

除了slice,map, function的內建類型都可以作為key

struce類型不包含上述字段,也可以作為key

struct

只有使用指標可以改變結構體內容

nil指標也可以呼叫方法

如何擴充系統型別或別人的型別:透過結構體繼承,透過型別起別名

package main
// 如何扩充系统类型或者别人的类型:通过结构体继承,通过类型起别名
type queue []int
func (q *queue) push(v int) {
    *q = append(*q, v)
    }
func (q *queue) pop() int {
     head := (*q)[0]*q = (*q)[1:]return head
     }
func (q *queue) isEmpty() bool {return len(*q) == 0
    }
func main() {
    }
登入後複製

值接受者vs指標接受者,

值接受者是go語言特有

要改變內容必須使用指標接受者,

結構過大也考慮使用指標接受者。

值/指標接受者都可以呼叫值/指標呼叫

package main
import "fmt"
type node struct {
value int
left, right *node
}
func newNode(value int) *node{
return &node{
value: value,
left:  nil,
right: nil,
}
}
func (n node) setVal(val int) {
n.value = val
}
func (n *node) setValue(vall int) {
n.value = vall
}
func (n node) print() {
fmt.Println(n.value)
}
func (n *node) travel() {
if n == nil {
return
}
fmt.Println(n.value)
n.left.travel()
n.right.travel()
}
func main() {
var root node
root = node{}
root.left = &node{value:5}
root.right = new(node)
root.left.right = &node{4, nil, nil}
root.right.left = newNode(7)
// 调用指针方法,相当于引用传递,可以改变外部的值
root.left.setValue(100)
fmt.Println(root.left.value)
// 值传递,调用值方法,方法内部不能改变外部值
root.left.setVal(99)
fmt.Println(root.left.value)
// 先序遍历
root.travel()
}
登入後複製

interface

多用介面組合

defer

panic和return都不影響defer的呼叫

以上是golang是不是高階語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1264
29
C# 教程
1237
24
如何使用 Golang 安全地讀取和寫入檔案? 如何使用 Golang 安全地讀取和寫入檔案? Jun 06, 2024 pm 05:14 PM

在Go中安全地讀取和寫入檔案至關重要。指南包括:檢查檔案權限使用defer關閉檔案驗證檔案路徑使用上下文逾時遵循這些準則可確保資料的安全性和應用程式的健全性。

如何為 Golang 資料庫連線配置連線池? 如何為 Golang 資料庫連線配置連線池? Jun 06, 2024 am 11:21 AM

如何為Go資料庫連線配置連線池?使用database/sql包中的DB類型建立資料庫連線;設定MaxOpenConns以控制最大並發連線數;設定MaxIdleConns以設定最大空閒連線數;設定ConnMaxLifetime以控制連線的最大生命週期。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

Golang框架與Go框架:內部架構與外部特性對比 Golang框架與Go框架:內部架構與外部特性對比 Jun 06, 2024 pm 12:37 PM

GoLang框架與Go框架的差異體現在內部架構與外部特性。 GoLang框架基於Go標準函式庫,擴充其功能,而Go框架由獨立函式庫組成,以實現特定目的。 GoLang框架更靈活,Go框架更容易上手。 GoLang框架在效能上稍有優勢,Go框架的可擴充性更高。案例:gin-gonic(Go框架)用於建立RESTAPI,而Echo(GoLang框架)用於建立Web應用程式。

從前端轉型後端開發,學習Java還是Golang更有前景? 從前端轉型後端開發,學習Java還是Golang更有前景? Apr 02, 2025 am 09:12 AM

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

golang框架開發實戰教學:常見疑問解答 golang框架開發實戰教學:常見疑問解答 Jun 06, 2024 am 11:02 AM

Go框架開發常見問題:框架選擇:取決於應用需求和開發者偏好,如Gin(API)、Echo(可擴展)、Beego(ORM)、Iris(效能)。安裝和使用:使用gomod指令安裝,導入框架並使用。資料庫互動:使用ORM庫,如gorm,建立資料庫連線和操作。身份驗證和授權:使用會話管理和身份驗證中間件,如gin-contrib/sessions。實戰案例:使用Gin框架建立一個簡單的部落格API,提供POST、GET等功能。

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

如何找出 Golang 正規表示式符合的第一個子字串? 如何找出 Golang 正規表示式符合的第一個子字串? Jun 06, 2024 am 10:51 AM

FindStringSubmatch函數可找出正規表示式匹配的第一個子字串:此函數傳回包含匹配子字串的切片,第一個元素為整個匹配字串,後續元素為各個子字串。程式碼範例:regexp.FindStringSubmatch(text,pattern)傳回符合子字串的切片。實戰案例:可用於匹配電子郵件地址中的域名,例如:email:="user@example.com",pattern:=@([^\s]+)$獲取域名match[1]。