Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

[Golang] ว่าด้วย internal package

$
0
0

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

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

  1. Local หรือ unexported เทียบได้กับ private นั่นคือ ขึ้นต้นด้วยตัวอักษรพิมพ์เล็ก
  2. 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 ดังนี้

[gist id="c98d1896c99d67d64a231216448e5890" file="main.go"]

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


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


Viewing all articles
Browse latest Browse all 1997

Trending Articles