ไป - ตัวแปร
ตัวแปรคืออะไรนอกจากชื่อที่กำหนดให้กับพื้นที่เก็บข้อมูลที่โปรแกรมสามารถจัดการได้ ตัวแปรแต่ละตัวใน Go มีประเภทเฉพาะซึ่งกำหนดขนาดและรูปแบบของหน่วยความจำของตัวแปรช่วงของค่าที่สามารถจัดเก็บภายในหน่วยความจำนั้นและชุดของการดำเนินการที่สามารถนำไปใช้กับตัวแปรได้
ชื่อของตัวแปรสามารถประกอบด้วยตัวอักษรตัวเลขและอักขระขีดล่าง ต้องขึ้นต้นด้วยตัวอักษรหรือขีดล่าง อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กแตกต่างกันเนื่องจาก Go เป็นตัวพิมพ์เล็กและใหญ่ ตามประเภทพื้นฐานที่อธิบายไว้ในบทที่แล้วจะมีประเภทตัวแปรพื้นฐานดังต่อไปนี้ -
ซีเนียร์ No | ประเภทและคำอธิบาย |
---|---|
1 | byte โดยทั่วไปเป็นอ็อกเต็ตเดี่ยว (หนึ่งไบต์) นี่คือประเภทไบต์ |
2 | int ขนาดของจำนวนเต็มที่เป็นธรรมชาติที่สุดสำหรับเครื่อง |
3 | float32 ค่าทศนิยมที่มีความแม่นยำเดียว |
ภาษาโปรแกรม Go ยังอนุญาตให้กำหนดตัวแปรประเภทอื่น ๆ เช่น Enumeration, Pointer, Array, Structure และ Union ซึ่งเราจะพูดถึงในบทต่อ ๆ ไป ในบทนี้เราจะเน้นเฉพาะประเภทตัวแปรพื้นฐาน
นิยามตัวแปรใน Go
นิยามตัวแปรจะบอกคอมไพลเลอร์ว่าจะสร้างหน่วยเก็บข้อมูลที่ใดและเท่าใดสำหรับตัวแปร นิยามตัวแปรระบุชนิดข้อมูลและมีรายการตัวแปรประเภทนั้นอย่างน้อยหนึ่งรายการดังนี้ -
var variable_list optional_data_type;
ที่นี่ optional_data_type เป็นประเภทข้อมูล Go ที่ถูกต้องรวมถึงไบต์ int float32 complex64 บูลีนหรือวัตถุที่ผู้ใช้กำหนดเอง ฯลฯ และ variable_listอาจประกอบด้วยชื่อตัวบ่งชี้อย่างน้อยหนึ่งชื่อโดยคั่นด้วยเครื่องหมายจุลภาค การประกาศที่ถูกต้องบางส่วนแสดงไว้ที่นี่ -
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
คำสั่ง “var i, j, k;”ประกาศและกำหนดตัวแปร i, j และ k; ซึ่งสั่งให้คอมไพเลอร์สร้างตัวแปรชื่อ i, j และ k ประเภท int
ตัวแปรสามารถเริ่มต้นได้ (กำหนดค่าเริ่มต้น) ในการประกาศ ประเภทของตัวแปรจะถูกตัดสินโดยคอมไพเลอร์โดยอัตโนมัติตามค่าที่ส่งผ่านไป initializer ประกอบด้วยเครื่องหมายเท่ากับตามด้วยนิพจน์คงที่ดังนี้ -
variable_name = value;
ตัวอย่างเช่น,
d = 3, f = 5; // declaration of d and f. Here d and f are int
สำหรับคำจำกัดความที่ไม่มีตัวเริ่มต้น: ตัวแปรที่มีระยะเวลาการจัดเก็บแบบคงที่จะเริ่มต้นโดยปริยายด้วยศูนย์ (ไบต์ทั้งหมดมีค่า 0); ค่าเริ่มต้นของตัวแปรอื่น ๆ ทั้งหมดเป็นค่าศูนย์ของชนิดข้อมูล
การประกาศประเภทคงที่ใน Go
การประกาศตัวแปรชนิดคงที่ให้การรับรองกับคอมไพลเลอร์ว่ามีตัวแปรหนึ่งตัวพร้อมกับชนิดและชื่อที่กำหนดเพื่อให้คอมไพลเลอร์สามารถดำเนินการรวบรวมต่อไปได้โดยไม่ต้องการรายละเอียดทั้งหมดของตัวแปร การประกาศตัวแปรมีความหมายในช่วงเวลาของการคอมไพล์เท่านั้นคอมไพเลอร์ต้องการการประกาศตัวแปรจริงในขณะที่เชื่อมโยงโปรแกรม
ตัวอย่าง
ลองใช้ตัวอย่างต่อไปนี้ซึ่งมีการประกาศตัวแปรด้วยชนิดและเริ่มต้นภายในฟังก์ชันหลัก -
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T\n", x)
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
20
x is of type float64
การประกาศประเภทไดนามิก / การอนุมานประเภทใน Go
การประกาศตัวแปรชนิดไดนามิกต้องการให้คอมไพเลอร์ตีความประเภทของตัวแปรตามค่าที่ส่งผ่านไป คอมไพเลอร์ไม่ต้องการตัวแปรที่จะต้องพิมพ์แบบคงที่เป็นข้อกำหนดที่จำเป็น
ตัวอย่าง
ลองใช้ตัวอย่างต่อไปนี้ซึ่งมีการประกาศตัวแปรโดยไม่มีประเภทใด ๆ ขอให้สังเกตในกรณีของการอนุมานประเภทเราเริ่มต้นตัวแปรy ด้วย: = ตัวดำเนินการในขณะที่ x เริ่มต้นโดยใช้ตัวดำเนินการ =
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T\n", x)
fmt.Printf("y is of type %T\n", y)
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
20
42
x is of type float64
y is of type int
การประกาศตัวแปรผสมใน Go
ตัวแปรประเภทต่างๆสามารถประกาศได้ในครั้งเดียวโดยใช้การอนุมานประเภท
ตัวอย่าง
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T\n", a)
fmt.Printf("b is of type %T\n", b)
fmt.Printf("c is of type %T\n", c)
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -
3
4
foo
a is of type int
b is of type int
c is of type string
ค่า lvalues และ rvalues ใน Go
มีนิพจน์สองประเภทใน Go -
lvalue- นิพจน์ที่อ้างถึงตำแหน่งหน่วยความจำเรียกว่านิพจน์ "lvalue" ค่า lvalue อาจปรากฏเป็นด้านซ้ายหรือด้านขวาของงาน
rvalue- คำว่า rvalue หมายถึงค่าข้อมูลที่เก็บไว้ที่ที่อยู่บางส่วนในหน่วยความจำ rvalue คือนิพจน์ที่ไม่สามารถกำหนดค่าได้ซึ่งหมายความว่า rvalue อาจปรากฏทางด้านขวา แต่ไม่ใช่ด้านซ้ายมือของงาน
ตัวแปรคือ lvalues ดังนั้นจึงอาจปรากฏทางด้านซ้ายมือของงาน ตัวอักษรตัวเลขเป็นค่า r จึงไม่สามารถกำหนดได้และจะไม่ปรากฏทางด้านซ้ายมือ
ข้อความต่อไปนี้ใช้ได้ -
x = 20.0
ข้อความต่อไปนี้ไม่ถูกต้อง มันจะสร้างข้อผิดพลาดเวลาคอมไพล์ -
10 = 20