ネコについてGolangを学ぶ[10]-new&ポインタ

2011 ワード

GolangはさすがCとJavaScriptの混合体で、newもあればポインタもあります.ただしGolangのポインタにはポインタ演算がありません.
1.まずGolangのポインタについて話します.C言語のポインタに似ています.アスタリスク(*)で表し、and記号(&)でアドレスを取ります.
ここでは初心者に説明しなければなりません.多くの教材では、ポインタを話すときに構造体(Struct)と協力して話しています.初心者にポインタが構造体に協力していると勘違いさせます.そうではありません.どのデータ型でもポインタを使うことができます.次の例を見てみましょう.
package main

import "fmt"

func main() {
	var p1 *int
	i := 10
	p1 = &i
	fmt.Println("*p1 =",*p1)
	fmt.Println("p1 =", p1)
	
	var p2 *string
	str1 := "test string"
	p2 = &str1
	fmt.Println("*p2 =",*p2)
	fmt.Println("p2 =",p2)
 var p3 *float32
// fmt.Println("*p3 =", *p3)  //    ,      。
 fmt.Println("p3 =", p3)
}
#   
*p1 = 10
p1 = 0xc0820022d0
*p2 = test string
p2 = 0xc082002340
p3 = 

使い方はC言語と同じですか?p 3は空のポインタで、デフォルトはnilで、内容のないポインタは印刷できません.コンパイルエラーが報告されます.
ポインタ配合構造体の例はここでは挙げませんが、多すぎます.
2.Golangのnew
new()は、ゼロ初期化の値を割り当て、このタイプのポインタを返します.なぜポインタを先に言ってnewを言うのか知っていますか?
新wには2つの使い方があります.
t:=new(T)またはvar t*T=new(T)
ポインタのようなもので、多くの例がポインタ、new、structを直接一緒に置いています.確かに,構造体のnew,ポインタ操作はより意味があるが,他のタイプを代表しないとだめである.
次の例を見て、newキーワードを理解してみましょう.
package main

import "fmt"

type struct1 struct {
	x int
	y float32
	z string
}

func main() {
	t1 := new (int)
	fmt.Println("t1 =",t1)
	fmt.Println("*t1 =",*t1)
	
	var t2 *string = new(string)
	fmt.Println("t2 =",t2)
	fmt.Println("*t2 =",*t2)
	
	t3 := new(struct1)
	fmt.Println("t3 =",t3)
	fmt.Println("*t3 =",*t3)
}
#  
t1 = 0xc0820022d0
*t1 = 0
t2 = 0xc082002330
*t2 = 
t3 = &{0 0 }
*t3 = {0 0 }

新しく宣言された値は、空または論理的な「偽」の値を返し、文字列の場合は空白になります.
3.newは宣言クラスのインスタンスではありません...
最初は、OOの思考に薫陶された猫の兄もnewがあると思っていたが、構造体の縛り方(後述)があり、Golangにも「class」のような概念があった.
その後、猫の兄は自分の考えが間違っていることに気づいて、OOの3要素、Golangは1つも満足していません.だから、Golangはオブジェクト向けの言語ではなく、偽のオブジェクト向けでもないに違いない.プロセス向け言語です
21世紀には、プロセス言語のようにタスクを完了することができ、Golangの際立った利点は、高い同時処理能力である.