この記事は、go language チュートリアル コラムで ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? Pointer ポインタの 11 の知識を紹介するもので、困っている友人の役に立てば幸いです。
ポインタは、優れたコードを書く上で最も重要な部分の 1 つです。この記事では、ポインターとは何か、そして ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? でのポインターの使用方法について説明します。
ポインタは、それが指すアドレスを格納する変数です。特定の型のポインターは、その型のみを指すことができます (データ型は不変です)。
ポインターの構文は非常に単純です。以下は、ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? でのポインター宣言の構文です。
var ptr *typevar ptrint *int // 指向 int 的指针
ポインタのゼロ値は nil です。
&:
package mainimport ( "fmt")func main() { var q int = 42 var p *int // declare the pointer p = &q // initialize the pointer fmt.Println(p) // 0x40e020}
# 演算子を使用してポインター値操作を実行する例です: <pre class="brush:php;toolbar:false">package mainimport (
"fmt")func main() {
var q int = 42
var p *int
p = &q
fmt.Println(p) // 0x40e020
fmt.Println(*p) // 42}</pre>
package mainimport ( "fmt")func main() { i := 64 j := &i // j 是 int 类型的指针 k := &j // k 是存放指针地址的指针,也是 int 类型 fmt.Println(i) // 64 fmt.Println(j) // 0x40e020 fmt.Println(*j) // 64 (value inside that address) fmt.Println(k) // 0x40c138 fmt.Println(*k) // 0x40e020 (address of j)}
package mainimport ( "fmt")func main() { var a interface{} b := &a fmt.Println(b) // 0x40c138 fmt.Println(*b) // <nil>}</nil>次に、ポインターを使用したインターフェイスの使用例を示します。
package mainimport ( "fmt")// 定义接口type Bird interface{ fly()}type B struct{ name string}// 实现它func (b B)fly() { fmt.Println("Flying...")}func main() { var a Bird = B{"Peacock"} b := &a fmt.Println(b) // 0x40c138 fmt.Println(*b) // {Peacock}}ここで
"a"
は構造体型 Bird であり、ご覧のとおり、インターフェイス型として使用されます。これはポリモーフィズムの使用です。 ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? ではインターフェイスを使用したポリモーフィズムが可能であるため、構造体またはインターフェイスへのポインターが ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? では不可欠なツールであることがわかります。7. 関数パラメータとしてのポインタ
package mainimport ( "fmt")//声明指针参数func f(a *int) { fmt.Println(*a)}func main() { var a int = 42 // 传递地址 f(&a) // 42}
大きなオブジェクトを使用すると、実行時間が遅くなる可能性があります。これは、構造体へのポインターを渡す例です。これは、大きなオブジェクトを処理する効率的な方法です。 package mainimport (
"fmt")type Human struct {
name string
age int
place string}func f(h *Human) {
fmt.Println("The user", (*h).name, "is", (*h).age, "years old and he is from", (*h).place)}func main() {
john := Human{"John", 36, "Las Vegas"}
f(&john) // The user John is 36 years old and he is from Las Vegas}
構造体を逆参照するときは注意してください。 #**structname.field1
正しい
メソッドは(*structname).field1 です。
関数内でポインタを使用すると、パラメータが const でない限り、値は "mutable" になります。そのため、値を変更する場合は常に、その値へのポインタを関数として使用する必要があります。パラメータを変更し、必要な変更を加えます。
8. ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? の "new" 関数
ゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか? のpackage mainimport ( "fmt")func main() { ptri := new(int) *ptri = 67 fmt.Println(ptri) // 0x40e020 fmt.Println(*ptri) // 67}
9. 関数からポインタを返す
他の値と同様に、関数からは任意のタイプのポインタを返すことができます。とてもシンプルです。値を直接返すのではなく、値のアドレスを返します。package mainimport ( "fmt")func p() *int { // 将返回类型指定为指针 v := 101 // 返回地址 return &v}func main() { n := p() fmt.Println(n) // 0x40e020 fmt.Println(*n) // 101}
package mainimport ( "fmt")func main() { f := func() { fmt.Println("a function") } pf := f pf() // 一个函数}
翻訳アドレス: https://learnku.com/go/t/60880
以上がゴーポインターとは何ですか?習得する必要がある知識ポイントは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。