Tags:
Topics: 
Node Thumbnail

โครงการภาษา Go ออกเวอร์ชั่น 1.22 ปรับปรุงย่อยโดยมีความเปลี่ยนแปลงสำคัญคือการแก้ไขระบบ for-loop ให้รองรับการรันตามจำนวนรอบที่ต้องการอย่างเดียวโดยไม่ต้องสร้าง collection อีก แนวทางนี้ทำให้โค้ดภาษา Go ใกล้เคียงกับไพธอนยิ่งขึ้น

ในเวอร์ชั่นนี้ยังมีการแก้ปัญหาตัวแปรใน loop ที่ภาษา Go เคยแชร์ตัวแปรระหว่างรอบการวน loop ให้เป็นตัวแปรเดียวกัน ซึ่งทำให้โปรแกรมเมอร์หลายคนเจอบั๊กโดยไม่ได้ตั้งใจ หลังจากนี้จะทำให้ตัวแปรถูกสร้างใหม่ทุกครั้งที่วน loop แม้พฤติกรรมจะเปลี่ยนไปบ้างแค่คาดว่าจะแทบไม่กระทบแอปพลิเคชั่นส่วนใหญ่ โดยมีเครื่องมือช่วยตรวจสอบ loop ที่ได้รับผลกระทบให้

สำหรับไลบรารีมาตรฐานเวอร์ชั่นนี้โครงการ Go ใส่ไลบรารี math/rand/v2 เข้ามาเนื่องจากมีการปรับ API จำนวนมากจากเวอร์ชั่นเดิม หลังจากนี้จะมีเครื่องมือสำหรับย้ายไลบรารีเดิมไปเวอร์ชั่นใหม่ให้ โดยยังไม่มีแผนที่จะถอดเวอร์ชั่นเดิมออก

ที่มา - Golang.org

No Description

Get latest news from Blognone

Comments

By: btoy
Contributor Android Windows
on 8 February 2024 - 12:04 #1305400
btoy's picture

เยี่ยมเลย อัพเกรดไปละ


..: เรื่อยไป

By: rattananen
Android Windows
on 8 February 2024 - 17:43 #1305430

ไปดูผ่านๆ มาพอมี generic แล้ว syntax โคตรรก

By: mr_tawan
Contributor iPhone Android Windows
on 8 February 2024 - 20:33 #1305445 Reply to:1305430
mr_tawan's picture

ถ้าใส่ generic แล้ว จะทำยังไงไม่ให้มันรกดีครับ ?


  • 9tawan.net บล็อกส่วนตัวฮับ
By: nont on 8 February 2024 - 22:53 #1305452 Reply to:1305430

Generics ไม่ได้ใช้บ่อยขนาดนั้นนะครับ ส่วนมากก็ใช้ slice ซะมากกว่า

By: lew
Founder Jusci's WriterMEconomics Android
on 8 February 2024 - 23:42 #1305454 Reply to:1305430
lew's picture

ต้องไปเจอ C++ ที่เขียน Template หนักๆ


lewcpe.com , @wasonliw

By: rattananen
Android Windows
on 9 February 2024 - 00:42 #1305456 Reply to:1305454

https://tip.golang.org/wiki/RangefuncExperiment#how-is-iterpull-used

go:

 type Zipped[T1, T2 any] struct {
    V1  T1
    OK1 bool

    V2  T2
    OK2 bool
}


func Zip[T1, T2 any](seq1 iter.Seq[T1], seq2 iter.Seq[T2]) iter.Seq[Zipped[T1, T2]]; 

c++:

 template<typename T1, typename T2>
struct Zipped{
  T1 V1;
  T1 V2;
  bool OK1;
  bool OK2;
};

template<
 typename T1, 
 typename T2, 
 typename ZIP = Zipped<T1,T2>
>
iter::Seq<ZIP> zip(iter::Seq<T1> seq1, iter::Seq<T2> seq2 ); 

ไม่แน่ใจผมว่าของ c++ มันอ่านง่ายกว่า แล้วมัน newline ได้ไม่มีปัญหา
ไม่แน่ใจ Go นี้ newline ได้หรือเปล่า
และ GO ใช้ square backet สำหรับ generic เหมือน array ดูผ่านๆ ผมก็นึกว่า array

By: nont on 9 February 2024 - 00:59 #1305458 Reply to:1305456

น่าสนใจ ผมว่าต้องลองเทียบดูกับตอนเรียกใช้ด้วยครับ

By: btoy
Contributor Android Windows
on 9 February 2024 - 08:24 #1305468 Reply to:1305456
btoy's picture

ผมไม่เคยใช้ Template ใน Go เพราะเขียนแค่ใช้งานเอง พอมาเห็น syntax ใช้เป็น [] นี่ เห็นด้วยว่ามันไม่ค่อยเหมาะเท่าไหร่ เพราะ [] ใช้กับ Array และ Slice ไปละ

แต่ก็นะ หวังว่าคงไม่ได้ใช้งานมันเท่าไหร่ 555

ปล. ส่วน Template ของ C++ ตอนแรก ผมก็ว่ามันดูเข้าใจยากกว่า Generic ในภาษาอื่นนิดๆ (เห็นในภาษาอื่นทีหลัง C++) แต่ไปๆมาๆ ก็แอบคิดว่ามันไม่ได้อ่านยากไปกว่าของชาวบ้านเท่าไหร่


..: เรื่อยไป