go は高級言語です。 Go 言語は、2009 年に Google によってオープンソース化された高水準プログラミング言語です。大規模システムの開発プロセスにおける実際的な問題を解決するために設計されており、同時実行性、統一された仕様、シンプルさ、優雅さ、強力なパフォーマンスをサポートしています。目標は「Pythonなどの動的言語の開発スピードと、C/Cなどのコンパイル言語のパフォーマンスとセキュリティの両方を兼ね備えること」です。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
コンピュータ言語は高級言語と低級言語に分けられます。高級言語とは、主にアセンブリ言語に関連したもので、より自然言語や数式に近いプログラミングであり、基本的に機械のハードウェアシステムから切り離して、人間にとって理解しやすいようにプログラムを記述します。書かれたプログラムをソースプログラムと呼びます。
高級言語は特定の言語を指すのではなく、人気のある go 言語
、java、c、c、C#、pascal、python、lisp などの多くのプログラミング言語が含まれます。 、prolog、FoxPro、Yi言語、中国語版C言語など。これらの言語は構文やコマンド形式が異なります。
Go 言語は、2009 年に Google によってオープンソース化された高水準プログラミング言語です。 これは、大規模システムの開発プロセスにおける実際的な問題を解決するように設計されています。同時実行性、統一された仕様、シンプルさとエレガントさを兼ね備え、強力なパフォーマンスを備えたこの言語は、多くの Go 言語伝道者から「クラウド コンピューティング時代の C 言語」と称賛されています。 Go言語の主な目標は、「Pythonなどの動的言語の開発スピードと、C/Cなどのコンパイル言語のパフォーマンスとセキュリティの両方を兼ね備えること」です。
#Go 言語は、「C に似た言語」または「21 世紀の C 言語」と呼ばれることもあります。 Go は、同様の式構文、制御フロー構造、基本データ型、呼び出しパラメータ値の転送、ポインタ、その他多くのアイデアを C 言語から継承しており、C 言語が常に重視してきたコンパイルされたマシンコードの実行効率も備えており、既存の Seamless と一貫性があります。オペレーティングシステムへの適応。
プログラマーの声: 現実の世界で必要であれば、数日で実稼働システムのプロトタイプを作成、テスト、デプロイできます。元の 1 秒あたり 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() { }
値レシーバーは 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 は高級言語ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。