จากที่ไปสอนและแบ่งปันความรู็พื้นฐานของภาษา Go
นึกขึ้นมาได้ว่า ลืมอธิบายเรื่อง internal package
ซึ่งเป็น package พิเศษของ Go
ที่เพิ่มมาตั้งแต่ Go version 1.4 เป็นต้นมา
ทำให้สามารถกำหนดขอบเขตการทำงานได้ดีขึ้น
เนื่องจากปกตินั้นจะมีรูปแบบการเข้าถึงทั้ง functions/variables/types 2 รูปแบบคือ
- Local หรือ unexported เทียบได้กับ private นั่นคือ ขึ้นต้นด้วยตัวอักษรพิมพ์เล็ก
- Global หรือ exported เทียบได้กับ public นั่นคือ ขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่
ตัวอย่างเช่น
[gist id="c98d1896c99d67d64a231216448e5890" file="1.go"]แต่มีในบางกรณีที่เราไม่ต้องการ
ให้ exported function/struct/interface ใช้งานจากภายนอก package ละ
จะทำอย่างไร ?
นั่นคือการ encapsulation การทำงานภายใน component/package ของระบบงานไว้
คำตอบคือ การใช้ internal package มาใช้งานนั่นเอง
ยกตัวอย่างเช่น
สร้าง package ดังนี้ขึ้นมา demo/component/internal
[gist id="c98d1896c99d67d64a231216448e5890" file="demo.go"]จากนั้นลองทำการเรียกใช้งาน function GlobalFunction() จาก main package
จะเจอ error ดังนี้
โดย function GlobalFunction()
จะสามารถเรียกได้จาก package demo/component เท่านั้น
น่าจะพอทำให้เข้าใจ
เกี่ยวกับการจัดการการ access หรือ visibility ของ Go กันเพิ่มบ้างแล้วนะครับ