golang編譯,golang編譯dll

本文目錄一覽:

sublime text 3 怎麼編譯golang

1.安裝git

因為golang是通過git來管理遠程包的,所以我們首先要安裝git

git安裝比較簡單,直接下一步即可(在Windows Explorer integration選項中將「Git Bash here」和「Git GUI here」打對勾),需要了解具體安裝的可以看這裡。

2.安裝Golang

1) 首先到選擇適合你系統的安裝包

2)我這裡選擇的是:go1.4.2.windows-amd64.msi,下載完成安裝到指定目錄即可。我這裡是(E:\Go)。

3)安裝完成後環境變量已經自動設置好了,可以呼出cmd命令行輸入命令查看

go env

可以看到,已經出現go命令了。如果你的不能出現,那可能是環境變量設置的問題。

進入我的電腦-高級設置-環境變量查看下,GOROOT變量是否存在,以及Path變量中是否也設置了GOROOT。沒有的話,新增一個GOROOT變量,路徑則輸入你剛剛安裝完成後Go的根目錄,如我的是:E:\Go\。然後編輯Path變量,在最後面新增”;%GOROOT%bin”。

4)go命令依賴一個環境變量:GOPATH,這不是Go的安裝目錄,而是你的工作(工程)目錄(你的代碼都會在該目錄下)。GOPATH可以有多個,windows以分號(;)進行區分,Linux系統是冒號(:),當有多個GOPATH時,默認會將go get的內容放在第一個目錄下。這裡我們新建一個GOPATH變量,以我的為例:F:\mygo。

3.安裝Sublime Text3

注意:sublime是收費軟件,不註冊也可以正常使用,只是保存次數達到一定的數量的時候會提示購買;忽略後可以正常使用。

這裡需要安裝一個sublime的pakcage control功能,用於接下來安裝sublime插件。

1)在打開軟件後,按下快捷鍵 Ctrl+`,(`這個符號為英文半角模式下,按下 Tab 鍵上方、數字鍵1左邊的那個按鍵),此時會打開一個命令窗口,複製並輸入以下內容,最後回車:

import urllib.request,os,hashlib; h = ‘eb2297e1a458f27d836c04bb0cbaf282’ + ‘d0e7a3098092775ccb37ca9d6b2e4b7d’; pf = ‘Package Control.sublime-package’; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( ” + pf.replace(‘ ‘, ‘%20’)).read(); dh = hashlib.sha256(by).hexdigest(); print(‘Error validating download (got %s instead of %s), please try manual install’ % (dh, h)) if dh != h else open(os.path.join( ipp, pf), ‘wb’ ).write(by)

2)重啟sublime之後,你就可以發現在 Preferences 這個菜單下出現了菜單項 Package Control,如圖:

4. 安裝GoSublime插件

1)在sublime中,按住快捷鍵 shift + ctrl + p,在彈出框中輸入install package,如圖:

2)回車,會出現如下圖(可能需要稍微等待下,可以看sublime最下面的狀態):

3)輸入gosublime,回車(可能需要稍微等待下,可以看sublime最下面的狀態),如圖:

4)gosublime安裝完成後,Preferences – package settings – GoSublime – Settings – Uesrs需要配置下GOPATH,GOROOT,如圖:

5)在打開的窗口中輸入以下內容,路徑請自行替換,ctrl+s保存。

{

“env”: {

“GOPATH”: “F:/mygo”,

“GOROOT”: “E:/Go”

}

}

6)重啟sublime,在GOPATH中的src新建一個hello.go文件,可以看到代碼自動補全已經出來了,:)

至此,sublime text3 + golang 安裝完成。

怎麼編譯golang寫的程序為系統服務

設置GOPATH,這個環境變量指向你的projectDir(工程目錄),形如:GOPATH=/home/user/ext:/home/user/projectDir (可以設置多個工程目錄,linux下用冒號分隔,windows下用分號分隔)

創建工程文件夾projectDir

在projectDir下創建src目錄

在src下創建區分包的文件夾myDir

在myDir下創建包pkgDir

在pkgDir下創建package source源代碼文件,這些文件的package都是pkgDir

Golang 的靜態編譯

Go 語言和 C 語言的一個很大的區別是, Go 語言只靜態編譯,做個測試:

一方面是 Go 語言編譯後的可執行文件大小比 C 語言的大很多,

另一方面是 C 語言的可執行文件需要依賴 glibc 動態庫,

用 ldd 命令可以看出來:

或者直接刪除 glibc 動態庫, C 可執行程序報錯,而 Go 的還能運行:

這時候只有內部命令可以運行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運行了:

設置好 LD_PRELOAD 環境變量之後, ln 命令可以運行,但是 sudo 仍然不能運行

只能靠 root 用戶來重新創建軟連接了:

所以用 sudo 來 rm 文件要小心,還是用 root 比較好。如果沒有預先留一個打開的 root 終端,登錄都登不進去。

mac下打patch後編譯安裝golang

因為業務上的需求,架構師改了hack了一下golang的源碼,放出一個patch文件,給源碼打了patch之後,需要重新編譯go源碼,

我是用 brew 安裝的golang, 先用 go env 看看

鎖定了源碼的路徑: /usr/local/Cellar/go/1.7.5/libexec

Go從1.5版本開始實現「自舉」(Bootstrap),也就是用Go來實現Go、用Go來編譯Go,因此這裡的意思是系統默認用go1.4來編譯golang,

但是我的系統裏面並沒有go1.4,這裡偷個懶

等待編譯測試完成即可。

golang項目中使用條件編譯

golang中沒有類似C語言中條件編譯的寫法,比如在C代碼中可以使用如下語法做一些條件編譯,結合宏定義來使用可以實現諸如按需編譯release和debug版本代碼的需求

build tags 是通過代碼注釋的形式實現的,要寫在文件的最頂端;

go build指令在編譯項目的時候會檢查每一個文件的build tags,用來決定是編譯還是跳過該文件

build tags遵循以下規則

示例:

約束此文件只能在支持kqueue的BSD系統上編譯

一個文件可能包含多行條件編譯註釋,比如:

約束該文件在linux/386 或 darwin/386平台編譯

需要注意的點

正確的寫法如下:

編譯方法:

具有_$GOOS.go後綴的go文件在編譯的時候會根據當前平台來判斷是否將該文件導入並編譯;同樣適用於處理器架構判斷 _$GOARCH.go。

兩者可以結合起來使用,形式為: _$GOOS_$GOARCH.go

示例:

文件名必須提供,如果只由後綴的文件名會被編譯器忽略,比如:

這兩個文件會被編譯器忽略,因為以下劃線開頭的文件都會被忽略

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/187818.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-28 06:27
下一篇 2024-11-28 06:27

相關推薦

  • 使用Golang調用Python

    在現代軟件開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • 如何使用AutoHotkey調用DLL

    本文將從多個方面詳細講解如何使用AutoHotkey調用DLL。 一、AutoHotkey調用DLL的基礎知識 AutoHotkey作為一個已經非常成熟的自動化工具,它的腳本語言非…

    編程 2025-04-27
  • Node.js調用DLL詳解

    Node.js是一個開源、跨平台的JavaScript運行環境,它能夠讓JavaScript代碼在服務器端運行。在Node.js中調用DLL,可以讓JavaScript訪問一些高效…

    編程 2025-04-24
  • 深入解析msvcp90.dll

    一、MSVCP90.DLL概述 MSVCP90.DLL是Microsoft C++運行庫,它是Visual Studio 2008的一部分,提供了在64位Windows系統上運行C…

    編程 2025-04-24
  • Golang中使用strings.Split函數進行字符串分割的方法

    一、Split函數的基本用法 字符串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字符串也是一個基本的數據類型,而strings包提供了一些操作字符串的…

    編程 2025-04-23
  • 深入下探golang http server

    Go語言已經成為了軟件開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Golang環境變量全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變量來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23
  • Compacted:一個高性能的Golang緩存庫

    一、簡介 Compacted是一個使用Golang編寫的緩存庫,旨在提供高性能的內存緩存功能。相對於其他常見的緩存庫,Compacted在內存使用和性能方面都做了一定的優化。 緩存…

    編程 2025-04-23
  • Golang nil解析

    一、什麼是nil Nil是Golang語言中的一個預定義標識符,表示一個零值對象,通常表示一個空指針。Nil被定義為指針類型、函數類型、接口類型、map類型、Slice類型、Cha…

    編程 2025-04-23

發表回復

登錄後才能評論