ไปกับ Python: วิธีการเลือก

เมื่อพูดถึงความง่ายและสะดวกสำหรับนักพัฒนาและการเร่งความเร็วในการพัฒนาภาษาโปรแกรมสองภาษาก็เพิ่มขึ้นเหนือแพ็คนั่นคือ Python และ Go วันนี้ Python เป็นแกนนำในการเขียนสคริปต์ devops การเรียนรู้ของเครื่องและการทดสอบในขณะที่ Go กำลังขับเคลื่อนคลื่นลูกใหม่ของการประมวลผลแบบคลาวด์ที่ใช้คอนเทนเนอร์

บางครั้งตัวเลือกระหว่าง Python และ Go ก็ชัดเจน: เลือก Python สำหรับระบบนิเวศที่สมบูรณ์เลือก Go สำหรับความเร็วในการดำเนินการ แต่บางครั้งทางเลือกก็ไม่ชัดเจนนัก ในบทความนี้เราจะอธิบายถึงความแตกต่างที่สำคัญระหว่างสองภาษาและเน้นข้อดีข้อเสียเพื่อช่วยให้คุณเลือกภาษาที่เหมาะสมกับงานที่ทำอยู่

ไปเทียบกับ Python: ความสะดวกของนักพัฒนา

Python and Go มีชื่อเสียงในเรื่องความสะดวกในการทำงานด้วย ทั้งสองภาษามีไวยากรณ์ที่เรียบง่ายและตรงไปตรงมาและชุดคุณลักษณะขนาดเล็กและจดจำได้ง่าย

ทั้ง Python และ Go ยังมีวงจรการแก้ไขคอมไพล์รันสั้น ๆ Python ไม่มีเฟสการคอมไพล์ - มันถูกตีความดังนั้นสคริปต์จึงเรียกใช้งานเกือบจะในทันที ไปคอมไพล์ล่วงหน้า แต่ระยะการคอมไพล์เร็วกว่าภาษาเช่น C ++ มาก Go ให้ความรู้สึกเหมือนภาษาสคริปต์ที่ต้องใช้งานได้มากกว่าภาษาที่รวบรวมไว้ล่วงหน้า

Python ใช้คุณสมบัติการพิมพ์แบบไดนามิกทำให้ง่ายต่อการสร้างต้นแบบแอปพลิเคชันอย่างรวดเร็ว การติดป้ายกำกับสิ่งต่างๆด้วยประเภทเป็นทางเลือกและสามารถทำได้เพื่อบังคับใช้ความถูกต้องของโปรแกรมเพิ่มเติม (เป็นแนวคิดที่ดีสำหรับโครงการขนาดใหญ่) แต่ไม่จำเป็นต้องใช้ ฐานรหัสที่ใหญ่ขึ้นอาจกลายเป็นเรื่องยากหากไม่มีประเภท

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

ไปเทียบกับ Python: ความเร็วรันไทม์

หากมีพื้นที่หนึ่งที่ Go เอาชนะ Python ได้นั่นคือความเร็วในการดำเนินการ Go เป็นลำดับขนาดหรือเร็วกว่า Python แม้ว่าจะไม่มีการเพิ่มประสิทธิภาพใด ๆ ในส่วนของผู้พัฒนา ไปคอมไพล์โดยตรงกับรหัสเครื่องดั้งเดิมในขณะที่ไดนามิกรันไทม์ของ Python นั้นยากที่จะปรับให้เหมาะสมสำหรับความเร็ว

อย่างไรก็ตาม Python สามารถ "เร็วพอ" สำหรับงานทั่วไปหลายอย่างดังนั้นจึงควรเปรียบเทียบการใช้งาน Python สำหรับกรณีการใช้งานของคุณ งานที่เน้นประสิทธิภาพมากที่สุดจำนวนมากที่ Python ใช้ไม่ได้ดำเนินการใน Python เอง แต่ผ่านไลบรารีที่เขียนด้วย C หรือ C ++ นอกจากนี้รันไทม์ PyPy ซึ่งเป็นตัวแทนที่ดร็อปอินสำหรับรันไทม์ CPython แบบเดิมสามารถให้การเร่งความเร็วที่สำคัญสำหรับแอปพลิเคชันที่ใช้งานได้ยาวนานเช่นเว็บเซิร์ฟเวอร์แม้ว่าพลวัตของ Python จะใช้งานหนักก็ตาม

ไปเทียบกับ Python: การปรับใช้

Go ได้รับการออกแบบมาตั้งแต่เริ่มต้นเพื่อให้แอปที่คอมไพล์สามารถใช้งานเป็นไบนารีแบบสแตนด์อะโลนได้ในหลายแพลตฟอร์ม ในทางตรงกันข้าม Python ถูกสร้างขึ้นมาเป็นภาษาสคริปต์ดังนั้นโปรแกรม Python จึงต้องการรันไทม์ของ Python

Python ไม่มีโซลูชันดั้งเดิมสำหรับการปรับใช้สคริปต์เป็นปฏิบัติการแบบสแตนด์อโลน แต่คุณสามารถเปลี่ยนไปใช้ไลบรารีของบุคคลที่สามเช่น PyInstaller ได้ นอกจากนี้โซลูชันคอนเทนเนอร์เช่น Docker ช่วยให้ง่ายขึ้นเล็กน้อยในการจัดแพคเกจแอป Python ด้วยรันไทม์

ไปเทียบกับ Python: การจัดการโครงการ

โบนัสอีกอย่างเข้าสู่ Go ตั้งแต่เริ่มต้น: เทคนิคการจัดการโครงการซอฟต์แวร์ที่ทันสมัย การดำเนินการบรรทัดคำสั่งด่วนสร้างที่เก็บโปรเจ็กต์ Go ใหม่และจัดการการอ้างอิง เป็นที่น่าสังเกตว่า Go ไม่ได้รับการสนับสนุนที่ดีสำหรับการอ้างอิงและการสร้างที่ทำซ้ำได้เสมอไป แต่ตอนนี้ระบบโมดูลที่เปิดตัวใน Go 1.11 มีกลไกทั่วไปสำหรับการทำงานกับไลบรารีเวอร์ชันต่างๆ

ในบางวิธี Python ต้องทนทุกข์ทรมานจากปัญหาที่ตรงกันข้าม: เครื่องมือการจัดการโครงการและการกำหนดเวอร์ชันที่เหลือเฟือมักทำให้เกิดความสับสนว่าเครื่องมือและวิธีการใดดีที่สุดสำหรับงานนั้น ๆ ในด้านบวกก็หมายความว่าคุณไม่ได้เครียดกับการทำสิ่งต่างๆโดยเฉพาะ

ไปเทียบกับ Python: การเขียนโปรแกรมแบบอะซิงโครนัส

การดำเนินการแบบอะซิงโครนัส - ดำเนินการงานหนึ่งในขณะที่รอให้อีกงานหนึ่งทำงานให้เสร็จสิ้น - ช่วยให้โค้ด I / O-bound เช่นบริการเครือข่ายทำงานได้อย่างมีประสิทธิภาพ

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

Python เพิ่งได้รับการสนับสนุนระดับภาษาสำหรับพฤติกรรมแบบอะซิงโครนัสกับ  async/await คีย์เวิร์ด ก่อนหน้านั้นการเขียนโปรแกรมแบบอะซิงโครนัสเป็นไปได้ใน Python ไม่ใช่ตรงไปตรงมา นั่นหมายความว่าการรองรับไลบรารีสำหรับสำนวน Python async ที่ทันสมัยนั้นไม่ได้มีขั้นสูงเท่าที่ควรเนื่องจากเป็นตัวแฝงของภาษา แต่การสนับสนุนกำลังได้รับการปรับปรุงเนื่องจากไลบรารีจำนวนมากขึ้นเข้ากันได้กับ async และ Python เวอร์ชันที่ไม่ใช่ async ไม่รองรับ

ไปเทียบกับ Python: เกิดข้อผิดพลาดในการจัดการและการดีบัก

Python และ Go มีปรัชญาที่แตกต่างกันอย่างมากสำหรับการจัดการข้อผิดพลาด

ใน Python ข้อผิดพลาดเป็นอ็อบเจ็กต์ชั้นหนึ่งและแพร่กระจายไปยัง call chain ของแอปพลิเคชันเมื่อใดก็ตามที่แอปมีข้อยกเว้น ทำให้การจัดการข้อผิดพลาดเป็นทางเลือกดังนั้นโปรแกรมเมอร์ต้องตัดสินใจว่าจะจัดการกรณีใดและจัดการด้วยตนเอง ด้วยโทเค็นเดียวกันวิธีการของ Python ยังช่วยให้สามารถเขียนกลไกการจัดการข้อผิดพลาดที่ยืดหยุ่นมากขึ้นซึ่งจะไม่ทำให้ไซต์การโทรแต่ละแห่งยุ่งเหยิง

เมื่อใช้ Go ทุกฟังก์ชั่นจะส่งคืนค่าสำหรับฟังก์ชันนั้นเองรวมทั้งอ็อบเจ็กต์ข้อผิดพลาดที่เป็นไปได้ โดยทั่วไปโปรแกรม Go จะมีคำอธิบายประกอบที่ชัดเจนเกี่ยวกับเงื่อนไขข้อผิดพลาดที่เป็นไปได้ในไซต์การเรียกฟังก์ชันดังนั้นโค้ดจึงมีการจัดการข้อผิดพลาดที่ชัดเจน ข้อเสียของสิ่งนี้คือรหัส verbose Go ยังมี  panic/recoverคีย์เวิร์ดสำหรับจัดการสถานการณ์ที่รุนแรงซึ่งรับประกันว่าจะฆ่าโปรแกรมได้ทันทีแม้ว่าจะไม่ได้ถูกใช้อย่างแพร่หลายเท่ากับข้อยกเว้นของ Python Go 2.0 อาจมีกลไกการจัดการข้อผิดพลาดใหม่ที่ลดการใช้คำฟุ่มเฟือย แต่การแก้ไขภาษานั้นยังคงต้องใช้เวลานาน

ไปเทียบกับ Python: การทดสอบ

การพัฒนาซอฟต์แวร์สมัยใหม่บางอย่างไม่ได้ใช้การทดสอบหน่วยและการรวมระบบ แต่โครงการที่ทำจะมีประสิทธิภาพมากกว่า Go และ Python มีกลไกดั้งเดิมสำหรับการทดสอบหน่วย สำหรับ Go มีtesting แพ็คเกจดั้งเดิม สำหรับ Python มี  unittest กรอบ 

Go มีเมตริกความครอบคลุมการทดสอบเป็นส่วนหนึ่งของ  testing; ด้วย Python คุณต้องมีแพ็คเกจของบุคคลที่สาม  coverageเพื่อกำหนดว่าชุดทดสอบของคุณจะละเอียดเพียงใด ในทางกลับกัน Python มีตัวเลือกการทดสอบในตัวที่ยืดหยุ่นสูงเพื่อเสริมพลวัตของมันเช่นมีการยืนยันสำหรับการตรวจสอบเงื่อนไขทั่วไปที่หลากหลายรวมถึงข้อยกเว้นที่เพิ่มขึ้น Python ยังใช้คลาสเพื่อแยกรหัสทดสอบออกจากรหัสแอปพลิเคชันในขณะที่ Go ใช้ฟังก์ชันและรูปแบบการตั้งชื่อไฟล์

ไปเทียบกับ Python: ระบบนิเวศ

ในช่วงหลายปีที่ผ่านมา Python และ Go ได้รวบรวมไลบรารีซอฟต์แวร์ของบุคคลที่สามที่น่าประทับใจซึ่งสะท้อนถึงกรณีการใช้งานและจุดแข็งของพวกเขา

Python เป็นภาษา go-to สำหรับการเขียนสคริปต์และระบบอัตโนมัติมานานแล้วเช่นเดียวกับการสร้างบริการเว็บและการสร้างอินเทอร์เฟซที่ใช้งานง่ายระหว่างระบบที่ซับซ้อน หมวดหมู่สุดท้ายนี้เป็นวิธีที่ Python เข้ามามีอิทธิพลในด้านวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่อง: Python ช่วยให้ง่ายต่อการรวมไลบรารีและเวิร์กโฟลว์ขนาดใหญ่ที่ซับซ้อนซึ่งใช้ในการวิเคราะห์ข้อมูลขั้นสูงและโมเดลการเรียนรู้ของเครื่อง

เรื่องราวความสำเร็จของ Go เกี่ยวข้องกับคุณสมบัติการเขียนโปรแกรม async และความเร็วของระบบ เว็บเซิร์ฟเวอร์แอพพลิเคชั่นเครือข่ายไมโครเซอร์วิสที่เชื่อมต่อกับ CPU และยูทิลิตี้ระบบล้วนเป็นตัวเลือกที่ยอดเยี่ยมสำหรับ Go ซอฟต์แวร์ส่วนใหญ่ที่ขับเคลื่อนการพัฒนาแอปพลิเคชันที่ทันสมัยโดยใช้คอนเทนเนอร์ซึ่งรวมถึง Docker และ Kubernetes เขียนด้วย Go

วิธีหนึ่งในการพิจารณาว่าจะเลือก Go หรือ Python คือการดูว่าโครงการที่มีอยู่ใดที่เขียนในนั้นคล้ายคลึงกับความพยายามของคุณในปัจจุบัน มีโอกาสที่ดีที่สิ่งที่คุณกำลังพยายามสร้างนั้นถูกสร้างขึ้นโดยคนอื่นดังนั้นคุณสามารถเลือกไม่เพียง แต่ภาษาเท่านั้น แต่ยังรองรับไลบรารีที่เหมาะสมด้วย

สุดท้ายไม่มีอะไรที่บอกว่าคุณเขียนไม่ได้ทั้งใน Python  และ Go คุณสามารถใช้ Go สำหรับส่วนที่ไวต่อประสิทธิภาพของแอปพลิเคชันของคุณและจัดเตรียม Python wrapper หรือส่วนหน้าเพื่อความสะดวกและความสะดวกสบายของนักพัฒนา