จากที่ไปสอนและแบ่งปันความรู็พื้นฐานของภาษา Go
นึกขึ้นมาได้ว่า ลืมอธิบายเรื่อง internal package
ซึ่งเป็น package พิเศษของ Go
ที่เพิ่มมาตั้งแต่ Go version 1.4 เป็นต้นมา
ทำให้สามารถกำหนดขอบเขตการทำงานได้ดีขึ้น

เนื่องจากปกตินั้นจะมีรูปแบบการเข้าถึงทั้ง functions/variables/types 2 รูปแบบคือ

  1. Local หรือ unexported เทียบได้กับ private นั่นคือ ขึ้นต้นด้วยตัวอักษรพิมพ์เล็ก
  2. Global หรือ exported เทียบได้กับ public นั่นคือ ขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่

ตัวอย่างเช่น

แต่มีในบางกรณีที่เราไม่ต้องการ

ให้ exported function/struct/interface ใช้งานจากภายนอก package ละ
จะทำอย่างไร ?
นั่นคือการ encapsulation การทำงานภายใน component/package ของระบบงานไว้
คำตอบคือ การใช้ internal package มาใช้งานนั่นเอง

ยกตัวอย่างเช่น

สร้าง package ดังนี้ขึ้นมา demo/component/internal

จากนั้นลองทำการเรียกใช้งาน function GlobalFunction() จาก main package
จะเจอ error ดังนี้

โดย function GlobalFunction()
จะสามารถเรียกได้จาก package demo/component เท่านั้น


น่าจะพอทำให้เข้าใจ
เกี่ยวกับการจัดการการ access หรือ visibility ของ Go กันเพิ่มบ้างแล้วนะครับ

Tags:,