เมื่อได้ศึกษาและเขียน Go มาได้นิดหน่อย
มักจะใช้งานเครื่องหมาย = และ := อยู่เสมอ
เลยสงสัยว่ามันแตกต่างกันอย่างไร
ดังนั้นเขามาทำการศึกษาดีกว่า เพื่อให้เข้าใจมัน
เครื่องหมาย =
คือ assignment operator
เอาไว้กำหนดค่าให้กับตัวแปรอย่างเดียว
เครื่องหมาย :=
ไปดูในเอกสารของ Go มันก็เห็นมีในส่วน Operator นะ
แต่ไปพบว่ามันอยู่ในส่วนของ Operator และ Delimiter
แล้วมันยังไงกันล่ะ ??
ก็ตามไปเจออีกว่า := มันถูกใช้งานใน Short variable declaration
หรือการประกาศตัวแปรแบบสั้นๆ ดังตัวอย่าง
i, j := 0, 10 f := func() int { return 7 } ch := make(chan int) r, w := os.Pipe(fd) // os.Pipe() returns two values _, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
ดังนั้น := มันคือการประกาศตัวแปร และกำหนดค่าไปเลย
รวมทั้งยังสามารถประกาศซ้าได้ด้วย ซึ่งต่างจากการประกาศตัวแปรแบบปกติที่ห้ามซ้ำ
field1, offset := nextField(str, 0) field2, offset := nextField(str, offset) //redeclare
คำอธิบาย
ในการประกาศตัวแปรซ้ำนั้น Go จะไม่สร้างตัวแปรขึ้นมาใหม่
แต่จะทำเพียงการกำหนดค่าลงไปยังตัวแปรเดิมที่สร้างไว้แล้วนั่นเอง
การใช้งาน short variable declaration นี้
มักจะใช้งานใน function เพื่อทำการกำหนดค่าเริ่มต้น
ให้กับ if, for และ switch เพื่อประกาศตัวแปร local แบบชั่วคราว
ตัวอย่างเช่น
var input int = 0
จะมีค่าเท่ากับ
input := 10
เพิ่มเติมจากพี่ Pitsanu Swangpheaw ครับ
ถ้าจะ redeclare โดยใช้ := จะต้องมีตัวแปรตัวใหม่อย่างน้อยหนึ่งตัวครับ
ตัวอย่าง
field1, offset := 1, 1 field1, offset := 2, 2
เมื่อคอมไพล์แล้วจะ error: no new variables on left side of :=
Reference Website
http://tour.golang.org/#13
http://golang.org/ref/spec#Short_variable_declarations
http://stackoverflow.com/questions/17891226/golang-operator-difference-between-vs