เมื่อได้ศึกษาและเขียน Go มาได้นิดหน่อย
มักจะใช้งานเครื่องหมาย = และ := อยู่เสมอ
เลยสงสัยว่ามันแตกต่างกันอย่างไร
ดังนั้นเขามาทำการศึกษาดีกว่า เพื่อให้เข้าใจมัน


เครื่องหมาย = 

คือ assignment operator
เอาไว้กำหนดค่าให้กับตัวแปรอย่างเดียว

เครื่องหมาย :=
ปดูในเอกสารของ Go มันก็เห็นมีในส่วน Operator นะ

Screen Shot 2557-04-17 at 12.42.39 PM

แต่ไปพบว่ามันอยู่ในส่วนของ Operator และ Delimiter

Screen Shot 2557-04-17 at 12.44.11 PM

แล้วมันยังไงกันล่ะ ??

ก็ตามไปเจออีกว่า := มันถูกใช้งานใน 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

Tags: