go語言renderer包程式碼分析

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

renderer是Go語言的一個簡單的、輕量的、快速響應的呈現包,它可以支援JSON、JSONP、XML、HYAML、HTML、File等類型的響應。在開發web應用或RESTFul API的時候,這個包是非常方便的toolkit。

本文繞開如何使用它,深入到代碼實現中研究它,同時也嘗嘗Go語言套件的開發套路。

Go包基本結構體

package pkgnameimport (    "fmt"    ...)const (    CONST1 typeX = xx    ...)var (    VAR1 typeX = xxx    ...)func Fn1() {}

在Go語言中包名和目錄名保持一致,同一包內可共用命名空間。

  • 包檔案開頭除了注釋外,第一行,必須是package pkgname, 聲明包的名稱。
  • 在包聲明之後,可以import標準庫中的包和其他外部包。
  • 然後可以定義包常量、包變數(暴露變數和非暴露變數,以首字母大小寫來區分實現)。
  • 然後定義自訂類型、函數或方法。

import語句

import可以引入標準庫的包,也可以引入外部包。Go語言中一旦引入某個包,必須在程式中使用到這個包的命名空間,否則編譯報錯會告訴你引入了某個包,但代碼中未曾使用。

當然你也會有疑問,我如果需要引入包,但又不想使用怎麼辦。這個Go語言有一個特殊的符號"_", 放在引入包名前面,就可以防止編譯報錯。為什麼會有這種考慮呢? 因為有時候,我們只是希望引入一個包,然後執行這個包的一些初始化設定。然後在代碼中暫時不使用該包的任何方法和變數。

import (    _ "gitHub.com/xxxxx/pkgname")

上面語句會引入pkgname命名空間,但是暫時不在代碼中使用這個命名空間。這樣引入之後,會在pkgname包中尋找init()函數,然後在main()函數執行之前先執行它們,這點對於需要使用包之前做初始化非常有用。

暴露與非暴露的實現

我們在其他程式設計語言中,都接觸過private, protected, public之類的修飾符。 但是在Go語言中完全沒有這些,但是Go語言還是可以某些東西從包中暴露出去,而某些東西不暴露出去,它用的原則很簡單的,就是標識符如果以小寫字母開頭的,包外不可見; 而如果是標識符以大寫字元開頭的,包外可見,可訪問。

對於暴露變數和函數(方法)非常直觀簡單,但是如果是暴露的結構體,情況稍微複雜一點。 不過本質上也是差不多, 結構體外部如果小寫字母開頭,內部屬性大寫字母開頭。 則外部包直接不訪問,但如果通過函數或方法返回這個外部類型,那麼可以通過:=得到這個外部類型,從而可以訪問其內部屬性。舉例如下:

// package pkgnamepackage pkgnametype admin struct {    Name string    Email String}func Admin() *admin {    return &admin{        Name: "admin",        Email: "admin@email.com",    }}

那麼我們在外部包中,可以直接通過下面代碼訪問admin結構體內部的屬性:

admin := pkgname.Admin()fmt.Println(admin.Name, admin.Email)

當然這種情況下,需要你事Crowdsourced Security Testing道admin的結構以及包含的屬性名稱。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.