本文目錄一覽:
- 1、Golang入門到項目實戰 | golang簡介及安裝
- 2、golang是什麼意思
- 3、如何為Linux安裝Go語言
- 4、如何Golang開發Android應用
- 5、如何在Windows下安裝Go語言編程環境
Golang入門到項目實戰 | golang簡介及安裝
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。
go語言特點
go語言的應用領域
哪些公司(項目)在使用go語言
下載開發包
windows下安裝
1.打開下載的msi可執行文件,根據提示進行安裝。默認會安裝在c:/Program Files/go目錄下面。會自動添加go可執行文件環境變量。
2.驗證安裝情況
a.打開命令行
b. 輸入$ go version
linux下安裝
1.在/usr/local/下面創建一個目錄go
2.下載壓縮文件到該目錄(/usr/local/go),並解壓縮
3.添加/usr/local/go/bin到PATH環境變量,打開$HOME/.profile 或者/etc/profile輸入如下內容:
4.執行如下命令使得配置文件及時生效
驗證
1.如果你的mac有Homebrew包管理工具,可以使用它來安裝
2.如果沒有下載mac安裝包,根據提示安裝
3.默認安裝在/usr/local/go下面
4.設置環境變量,同Linux
golang是什麼意思
Go語言(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。 擴展資料
Go語言主要用作服務器端開發,其定位是用來開發「大型軟件」的,適合於很多程序員一起開發大型軟件,並且開發周期長,支持雲計算的網絡服務。Go語言能夠讓程序員快速開發,並且在軟件不斷的’增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和腳本語言的易用性和富於表達性。
Go語言作為服務器編程語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分佈式系統、數據庫代理等;網絡編程方面,Go語言廣泛應用於Web應用、API應用、下載應用等;除此之外,Go語言還可用於內存數據庫和雲平台領域,目前國外很多雲平台都是採用Go開發。
如何為Linux安裝Go語言
Go 語言又稱為 golang, 是由 Google 最初開發的一種開源編程語言,其在設計時就遵循了簡單、安全和速度的 3 大原則。Go 語言具有多種調試、測試、分析和代碼審查工具,如今 Go 語言和工具已在大多數 Linux 發行版本的源庫中進行提供,本文我就來說明如何為 Linux 安裝 Go 語言。Ubuntu、Debian或Linux Mint安裝Go語言基於 Debian的 Linux 發行版本都可以使用 apt-get 命令來進行安裝:sudo apt-get install golang要查看當前系統安裝的 Go 語言版本可以使用如下命令:go version由於 Go 代碼必需保存在 workspace(工作區)中,所以我們必需在 Home 目錄(例如 ~/workspace)創建一個workspace 目錄並定義 GOPATH 環境變量指向該目錄,這個目錄將被 Go 工具用於保存和編輯二進制文件。mkdir ~/workspaceecho ‘export GOPATH=”$HOME/workspace”‘ ~/.bashrcsource ~/.bashrc根據不同的需要,我們可以使用 apt-get 安裝 Go tools:sudo apt-cache search golangFedora、CentOS或RHEL安裝Go語言基於 Red Hat 的 Linux 發行版本都可以使用 yum 命令來進行安裝:sudo yum install golang要查看當前系統安裝的 Go 語言版本可以使用如下命令:go version接下來還是在 Home 目錄(例如 ~/workspace)創建一個 workspace 目錄並定義 GOPATH 環境變量指向該目錄,這個目錄將被 Go 工具用於保存和編輯二進制文件。mkdir ~/workspaceecho ‘export GOPATH=”$HOME/workspace”‘ ~/.bashrcsource ~/.bashrc根據不同的需要,我們可以使用 yum 安裝 Go tools:yum search golang為Linux手動安裝Go語言由於大家使用的 Linux 源不盡相同,也不見得是最新版本或需要版本的 Go 語言包,所以我們說一下如何手動安裝指定版本。下載 Go 語言文件64-bit Linuxwget Linuxwget 下載地址:解壓二進制文件到 /usr/local 目錄sudo tar -xzf go1.4.2.linux-xxx.tar.gz -C /usr/local使用 vi 在環境變量配置文件 /etc/profile 中增加如下內容:export PATH=$PATH:/usr/local/go/bin檢查 Go 語言版本go version定義 GOPATH 環境變量到 workspace 目錄export GOPATH=”$HOME/workspace
如何Golang開發Android應用
環境配置好複雜,我不得不嘮叨幾句。
需要下載golang1.4rc版,下載ndk,然後編譯。 然後用go get 下載gobind這個工具, 然後,將寫好的代碼用gobind轉化下,然後使用特殊的編譯命令,將代碼編譯成.so文件,將生成的相關文件,放到android studio的項目中。然後java代碼中,利用jni調用引用的代碼。
… 好,接着往下看吧。
環境準備
一台Linux 64的機器
一個帶有AndroidStudioIDE的開發機器
因為環境配置實在複雜,所以我們引入的docker。
docker pull codeskyblue/docker-goandroid
docker run –rm -ti codeskyblue/docker-goandroid bash
cd example; echo “view example projects
docker起來之後,什麼就都配置好了,NDK啦,java啦,GO的環境變量了,等等,並且還預裝了vim,gradle,tmux,git,syncthing,svn
開始寫代碼
寫代碼之前,先約定下目錄結構
go的代碼都放在src/golib下,編譯使用make.bash編譯腳本,看下這個文件樹
.
|– app.iml
|– build.gradle
|– libs/armeabi-v7a # go編譯生成的so文件
| `– libgojni.so
|– main.go_tmpl # 一個模板文件,先不用管它
|– make.bash # 編譯腳本,用來生成.so和Java代碼
`– src
|– golib
| |– hi
| | |– go_hi�0�2�0�2�0�2 # 自動生成的代碼
| | | `– go_hi.go
| | `– hi.go # 需要編寫的代碼
| `– main.go
`– main
|– AndroidManifest.xml
|– java
| |– go # 自動生成的代碼
| | |– Go.java
| | |– Seq.java
| | `– hi
| | `– Hi.java
| `– me/shengxiang/gohello # 主要的邏輯代碼
| `– MainActivity.java
`– res
我已經寫了一個例子,先直接搞下來
編譯下,試試行不行(就算不行問題應該也不大,因為大問題都被我消滅了)
cd GoHello/app
./make.bash
../gradlew build
一切順利的話在build/outputs/apk下應該可以看到app-debug.apk這個文件。(劇透下,這個文件只有800多K)
編譯好的我放到qiniu上了,可以點擊下載看看
下面可以嘗試改改,我拋磚引玉說下
打開hi.go這個文件
hi.go的內容,比較簡單,我們寫Go代碼主要就是這部分
// Package hi provides a function for saying hello.
package hi
import “fmt”
func Hello(name string) {
fmt.Printf(“Hello, %s!\n”, name)
return “(Go)World”
}
文件末尾添加下面這行代碼
func Welcome(name string) string {
return fmt.Sprintf(“Welcome %s to the go world”, name)
}
使用./make.bash重新編譯下
打開MainActivity.java 修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome(“yourname”);
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
編譯運行下,把生成的apk安裝到手機上試試。
原理解讀(有興趣的接着看)
首先說下gobind這個工具。
go_hi/go_hi.go這個文件時通過gobind這個工具生成的,用來配合一個簡單的程序,生成.so文件
// go_hi.go
package go_hi
import (
“golang.org/x/mobile/bind/seq”
“example/hi”
)
func proxy_Hello(out, in *seq.Buffer) {
param_name := in.ReadUTF16()
hi.Hello(param_name)
}
func init() {
seq.Register(“hi”, 1, proxy_Hello)
}
這個簡單的程序內容是這樣的
// main.go
package main
import (
“golang.org/x/mobile/app”
_ “golang.org/x/mobile/bind/java”
_ “example/hi/go_hi”
)
func main() {
app.Run(app.Callbacks{})
}
src/MyActivity.java文件內容是這樣的
import …
import go.Go; // 引入Go這個包
import go.hi.Hi; // gobind生成的代碼
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Go.init(getApplicationContext()); // 初始化兩個線程
Hi.Hello(“world”);
}
}
其中有一句Go.init(…)這裡再看go.Go這個包是什麼樣子的
public final class Go {
// init loads libgojni.so and starts the runtime.
public static void init(Context context) {
… 判斷該函數是否該執行的代碼 — 省略 —
System.loadLibrary(“gojni”); // gojni需要這句
new Thread(“GoMain”) {
public void run() {
Go.run(); // run()是一個native方法
}
}.start();
Go.waitForRun(); // 這個也是一個native方法
// 這部分可以理解為,啟動了一個後台線程不斷的接收結果到緩存中。
new Thread(“GoReceive”) {
public void run() { Seq.receive(); }
}.start();
}
private static boolean running = false;
private static native void run();
private static native void waitForRun();
}
MyActivity.java中還有段代碼是 Hi.Hello(“world”);,打開Hi.java路徑在src/go/hi/Hi.java,這個文件也是gobind生成的,是用來給java方便的調用.so文件
// Hi.java
// File is generated by gobind. Do not edit.
package go.hi;
import go.Seq;
public abstract class Hi {
private Hi() {} // uninstantiable
public static void Hello(String name) {
go.Seq _in = new go.Seq();
go.Seq _out = new go.Seq();
_in.writeUTF16(name);
Seq.send(DESCRIPTOR, CALL_Hello, _in, _out); // 下面接著說
}
private static final int CALL_Hello = 1;
private static final String DESCRIPTOR = “hi”;
}
Seq.send這部分實際上最終調用的是一段go代碼
func Send(descriptor string, code int, req *C.uint8_t, reqlen C.size_t, res **C.uint8_t, reslen *C.size_t) {
fn := seq.Registry[descriptor][code]
in := new(seq.Buffer)
if reqlen 0 {
in.Data = (*[maxSliceLen]byte)(unsafe.Pointer(req))[:reqlen]
}
out := new(seq.Buffer)
fn(out, in)
seqToBuf(res, reslen, out)
}
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
如何在Windows下安裝Go語言編程環境
下載安裝包
安裝包下載地址:golang.org/dl/
這裡選擇下載Windows版本,點擊鏈接打開的頁面可能不會開始下載;地址欄里會顯示完整的下載地址,如:golang.org/doc/install?download=go1.5.1.windows-amd64.msi,不開始下載也沒關係,我們複製一下下載地址,用迅雷之類的下載工具下。
開始安裝
一路下一步就行了,沒什麼需要設置的,安裝目錄最好保持默認,避免遇到一些怪問題。
安裝完成之後就可以打開命令行,看看安裝成功了沒有;
任意目錄下,直接執行「go」,能看到類似以下內容就對了:
或者執行:
[plain] view plain copy
C:\go version
go version go1.5.1 windows/amd64
注意:我在安裝完成之後執行「go」的時候就提示找不到文件或目錄,我打開環境變量,在用戶變量里加了一個PATH,
檢查系統變量「PATH」中也有「C:\Go\bin」,然後就在後面加了一個分號,確定保存之後再打開命令行就可以了,也不知道到底是哪個起作用了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157989.html