Go 関数のメモリ割り当て図
Go 関数のメモリ割り当てはヒープ割り当てに少し似ていますが、本質的には同じではありません。
#ヒープ メモリと同様に、スタックにはヒープのアドレスが格納されていることがわかります。
コード
package main import "fmt" func say() string { return "ok" } func main() { fmt.Printf("say栈上的内容:%p\n",say) }結果
グローバル変数
グローバル変数とは、すべての関数の外で定義された変数で、プログラムが終了するまで常に存在します。
当然,任何函数都可以访问全局变量。 注:全局变量尽量全部用大写。 结果: 上述可能会有个问题,全局变量,全局变量,大家共用一个,要是谁傻不拉几修改了不就完蛋了,整个程序都凉了。 就像这样。 结果: 这不就完犊子了吗???所以,一定要有解决办法。 解决办法:使用常量定义全局变量。 在定义全局变量时,需要用 局部变量,局部变量就是在某个函数内定义的变量,只能在自己函数内使用。 更专业点,在 代码 在Go中, 如果函数没有 代码 执行结果 代码 执行结果 可以发现,defer的执行结果是反着的。 结论:最先执行的defer,会最后执行,最后执行的defer,会最先执行,有点像栈,先进后出。 通常来说,defer会用在释放数据库连接,关闭文件等需要在函数结束时处理的操作。 这里暂时先不举例子。 这俩,可以理解为Python中的 应用场景:比如某个web,在启动时,数据库都没连接成功,必定要启动失败,就像电脑,没有电源必不能开机一样。 先看一下语法吧 执行效果 可以看淡, 尝试捕捉 代码 执行结果 可以看到,如果recover捕捉了,并且没有小试牛刀
package main
import "fmt"
var NAME = "张三"
func say() string {
fmt.Println(NAME)
return "ok"
}
func main() {
say()
fmt.Println(NAME)
}
var引发的问题
package main
import "fmt"
var NAME = "张三"
func say() string {
fmt.Println(NAME)
NAME = "李四"
return "ok"
}
func main() {
say()
fmt.Println(NAME)
}
使用const解决问题
package main
import "fmt"
const NAME = "张三"
func say() string {
fmt.Println(NAME)
//NAME = "李四"//会报错:cannot assign to NAME
return "ok"
}
func main() {
say()
fmt.Println(NAME)
}
总结
const
修饰,并且变量名全部大写。局部变量
{}
内定义的,只能在{}
内使用,for
同理。package main
import (
"fmt"
)
func say() string {
var name = "张三"
fmt.Println(name)
return "ok"
}
func main() {
say()
//fmt.Println(name)//会报错:undefined: name
//for同理
for i := 0; i <= 1; i++ {
var c = "66"
fmt.Println(c) //66
}
//fmt.Println(c)//会报错:undefined: c
}
defer
defer
语句,可以理解为在return
之前执行的一个语句。return
,会有一个默认的return
,只是看不见而已。一个defer
package main
import "fmt"
func say() {
//defer尽量往前放
defer fmt.Println("我是666")
fmt.Println("你们都是最棒的")
}
func main() {
say()
}
多个defer
package main
import "fmt"
func say() {
//defer尽量往前放
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println("你们都是最棒的")
}
func main() {
say()
}
defer的作用
panic和recover
try
和raise
,因为在Go中,是没有try
的,是不能像其他语言一样,try
所有异常。panic
package main
import "fmt"
func say() {
var flag = true
if flag{
//引发错误,直接中断程序的错误
panic("OMG,撤了撤了,必须撤了")
}
}
func main() {
say()
fmt.Println("继续呀...")//不会执行,程序挂了
}
继续呀
就没打印,程序直接挂了,但是上述好像并没有解决这个问题。recover
package main
import "fmt"
func say() {
//匿名函数,defer执行的是一个匿名函数
defer func() {
var err = recover()
//如果有panic错误,err!=nil,在此处步骤,尝试恢复
if err != nil {
fmt.Println("尝试恢复...")
}
}()
var flag = true
if flag {
panic("OMG,撤了撤了,必须撤了")
}
}
func main() {
say()
fmt.Println("继续呀...")
}
panic
,程序就会继续正常执行。注意
defer
必须在panic
语句之前。recover
必须配合defer
使用。
以上がGo言語の基本機能を理解するための記事(後編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Golangは実際のアプリケーションに優れており、そのシンプルさ、効率性、並行性で知られています。 1)同時プログラミングはゴルチンとチャネルを通じて実装されます。2)柔軟なコードは、インターフェイスと多型を使用して記述されます。3)ネット/HTTPパッケージを使用したネットワークプログラミングを簡素化、4)効率的な同時クローラーを構築する、5)ツールと最高の実践を通じてデバッグと最適化。

GOのコア機能には、ガベージコレクション、静的リンク、並行性サポートが含まれます。 1. GO言語の並行性モデルは、GoroutineとChannelを通じて効率的な同時プログラミングを実現します。 2.インターフェイスと多型は、インターフェイスメソッドを介して実装されているため、異なるタイプを統一された方法で処理できます。 3.基本的な使用法は、関数定義と呼び出しの効率を示しています。 4。高度な使用法では、スライスは動的なサイズ変更の強力な機能を提供します。 5.人種条件などの一般的なエラーは、Getest Raceを通じて検出および解決できます。 6.パフォーマンス最適化Sync.Poolを通じてオブジェクトを再利用して、ゴミ収集圧力を軽減します。

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

SQLクエリの結果の並べ替えについて混乱しています。 SQLを学習する過程で、しばしば混乱する問題に遭遇します。最近、著者は「Mick-SQL Basics」を読んでいます...

テクノロジースタックの収束とテクノロジーの選択の関係ソフトウェア開発におけるテクノロジーの選択、テクノロジースタックの選択と管理は非常に重要な問題です。最近、一部の読者が提案しています...

ゴーラン...

GO言語で3つの構造を比較および処理する方法。 GOプログラミングでは、2つの構造の違いを比較し、これらの違いを...

Goでグローバルにインストールされたパッケージを表示する方法は? GO言語で開発する過程で、GOはしばしば使用します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
