go是高階語言。Go語言是Google公司在2009年開源的一門高階程式語言,它為解決大型系統開發過程中的實際問題而設計,支援並行、規範統一、簡單優雅,效能強大;它的主要目標是「兼具 Python 等動態語言的開發速度和 C/C++ 等編譯型語言的效能與安全性」。
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
計算機語言具有高階語言和低階語言之分。而高階語言又主要是相對於組合語言而言的,它是較接近自然語言和數學公式的程式設計,基本脫離了機器的硬體系統,用人們更易理解的方式編寫程式。編寫的程式稱之為源程式。
高階語言並不是特指的某一種具體的語言,而是包括很多程式語言,如流行的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語言一直所看中的編譯後機器碼的執行效率以及和現有作業系統的無縫適配。
程式設計師的心聲:如果現實世界需要我能夠在幾天內對一個生產系統進行原型設計、測試和部署,而且在每秒能處理比原來多5倍請求,CPU和記憶體的開銷還都很小。我想大概只有Go語言可以勝任了。
Go語言有如下優點:
Go語言有如下缺點:
golang高階語法
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()
}
}
登入後複製
有如下
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
登入後複製
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()
}
登入後複製
更多程式設計相關知識,請存取:!!
以上就是go是高階語言嗎的詳細內容,更多請關注TW511.COM其它相關文章!