ネコについてGolangを学ぶ[10]-new&ポインタ
2011 ワード
GolangはさすがCとJavaScriptの混合体で、newもあればポインタもあります.ただしGolangのポインタにはポインタ演算がありません.
1.まずGolangのポインタについて話します.C言語のポインタに似ています.アスタリスク(*)で表し、and記号(&)でアドレスを取ります.
ここでは初心者に説明しなければなりません.多くの教材では、ポインタを話すときに構造体(Struct)と協力して話しています.初心者にポインタが構造体に協力していると勘違いさせます.そうではありません.どのデータ型でもポインタを使うことができます.次の例を見てみましょう.
使い方はC言語と同じですか?p 3は空のポインタで、デフォルトはnilで、内容のないポインタは印刷できません.コンパイルエラーが報告されます.
ポインタ配合構造体の例はここでは挙げませんが、多すぎます.
2.Golangのnew
式
新wには2つの使い方があります.
t:=new(T)またはvar t*T=new(T)
ポインタのようなもので、多くの例がポインタ、new、structを直接一緒に置いています.確かに,構造体のnew,ポインタ操作はより意味があるが,他のタイプを代表しないとだめである.
次の例を見て、newキーワードを理解してみましょう.
新しく宣言された値は、空または論理的な「偽」の値を返し、文字列の場合は空白になります.
3.newは宣言クラスのインスタンスではありません...
最初は、OOの思考に薫陶された猫の兄もnewがあると思っていたが、構造体の縛り方(後述)があり、Golangにも「class」のような概念があった.
その後、猫の兄は自分の考えが間違っていることに気づいて、OOの3要素、Golangは1つも満足していません.だから、Golangはオブジェクト向けの言語ではなく、偽のオブジェクト向けでもないに違いない.プロセス向け言語です
21世紀には、プロセス言語のようにタスクを完了することができ、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の際立った利点は、高い同時処理能力である.