golangandroid
⑴ 如何用Go語言開發Android應用
Go 是一個新的並沒有多少用戶的語言,但是 Obective-C同樣。Google 是 Go 語言的奠基人,可以完全控制 Go 語言的發展。Go 是在 BSD 協議下發布的開源語言,這意味著所有的開發者可以在任何地方使用它。另外,Go 是一個操作系統級的語言。這里有一些關於 Go 的信息。
Go 語言在現有的系統編程語言環境遇到困難時誕生了。程序設計變得如此的困難,而選擇語言就是其中很大的一個原因。開發者不得不選擇一個高效編譯、高效執行且開發簡單的語言,而這三種特性在現代的語言中並不會同時存在。程序開發者如果想選擇簡單勝過安全的語言,可能轉向動態類型的語言,例如 Python、javaScript 而不是C++、Java。Go 語言是一個試圖結合動態類型和靜態類型,編譯效率和安全性以及語言的易用性等眾多特性與一體的一種嘗試。他的另一個目標是支持現代的基於網路的、基於多核的計算。最後,Go 還是非常快的,他可以在單個計算機上僅僅花費幾秒時間構建一個龐大的應用程序。為了達到這些目標需要解決這些語言問題:靈活的類型系統、並發的垃圾回收、強制的依賴規范等等。這些東西不是舊的語言一些庫或者工具可以處理的,這也就是他被稱為新的編程語言的原因。
⑵ 為什麼google不把go語言作為android的開發語言
1.golang理論上應該還不算是Google的,因為它還是幾個大神的私人行為。
2.golang在最初的時候,表示暫時不會支持ui開發庫。至少現在還沒聽說官方會開始支持。
3.golang距離成熟,還有很長的路要走。你覺得一個使用者佔比這么小的語言,公司投入大價錢去推行,然後呢?拋棄Java么?很顯然是不可能的。
⑶ golang 一般 做 什麼 應用
可以做網站,可以做android應用,也可以做pc端的應用。
Go是Google開發的一種編譯型,可平行化,並具有垃圾回收功能的編程語言。
Go語言是基於Inferno操作系統所開發的。Go語言於2009年11月正式宣布推出,成為開放源代碼項目,並在Linux及Mac OS X平台上進行了實現,後追加Windows系統下的實現。
⑷ Go語言能在安卓運行嗎 Go是腳本語言還是匯編
go可以在安卓運行的,github.com/golang/mobile,這是用golang做移動端開發的庫,
go是靜態編譯語言,不是腳本語言
⑸ 為什麼我全力推薦Golang
為什麼我全力推薦Golang
其好處顯而易見:減少了人力、節省了時間、避免了 iOS 與 Android 版本發布的時間差,開發新功能可以更迅速。
下面,我們可以嘗試用React Native創建一個 iOS APP.
在我們開始之前,我建議:你可以在 Github
里先下載 React Native 的代碼框架。裡面還有一些示例項目,2048 的游戲, Movies(一個看電影的
APP),SampleApp, TicTacToe (一款游戲)和 UIExplorer(能顯示出所有用 React Native
替代的控制項,如ListView,TabBar,MapView, Slider)),對於學慣用如何用 React Native 創建
UI,這些都是非常好的例子,尤其是 UIExplorer APP,它幾乎用到了每一個您的 APP 中需要創建的 UI 控制項。
⑹ Google 為什麼不給 Golang 做一個自己的 IDE
谷歌公司(Google Inc.)成立於1998年9月4日,是一家位於美國的跨國科技企業,業務包括互聯網搜索、雲計算、廣告技術等,同時開發並提供大量基於互聯網的產品與服務,其主要利潤來自於AdWords等廣告服務。 1999年下半年,谷歌網站「Google」正式啟用。 2010年3月23日,宣布關閉在中國大陸市場搜索服務。2015年8月10日,宣布對企業架構進行調整,並創辦了一家名為Alphabet的「傘形公司」(Umbrella Company),成為Alphabet旗下子公司。
我覺得是沒有必要的,它的意義不大。
IDE 的難度大
做ide不是那麼容易,Go的核心團隊人數不多忙不過來。android現在是google的重心,不也沒有專門從頭開發一款ide么。ide真不是這么容易弄得,關鍵是要花大量時間。
所以說其實做不做IDE都是沒有什麼關系的。
⑺ 如何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)
}
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
⑻ android 可以用go 語言嗎
Go語言將支持Android
概述
我們建議將Go語言引入Android平台,重點是用Go語言編寫游戲程序,API將在Android
NDK中定義。
背景
Android平台被設定為一個多應用操作系統,一個相對於傳統UNIX系統來說更依賴於網路庫和服務的操作系統,這意味著我們將為Go運行時開放更多的API。
將Golang帶入Android平台是一件非常糟糕的事情,因為Android本身是Java構建的並且擁有巨量的API,任何試圖將這些API用Go替代的結果將會導致一個非常糟糕的結果。無論是手工建立包裝類還是自動建立都會導致程序運行非常緩慢。
然而如果使用基於C的API,通過AndroidNDK來編寫一些游戲類程序可能會帶來意想不到的收獲。
提議
在Golang
1.4周期中,Android平台的編譯將納入Go的源,並且包含Android支持的cgo(由Elias
Naur貢獻)。Dalvik-loadable
.so外部連接文件的支持也會由Android
NDK提供。
在發布上我們仍然提供交叉平台編譯,並且支持在Linux主機上adb工具在Android設備上測試程序。
我們將會提供一個名叫go.mobile的子版本,包含:
1、通過Android
NDK對OpenGL,OpenSL和OpenMAX的支持。
2、一個Java->Go的工具,支持通過Java調用Go的Package,所以許多游戲的菜單UI可以通過標准SDK構建。(有可能會支持通過其他語言調用Go,比如Objective-C。)
3、集成AndroidStudio
新特性將會在Go1.4穩定版中提供。
⑼ 怎麼分析和理解golang的pprof
做ide不是那麼容易的,Go的核心團隊人數不多忙不過來。android現在是google的重心,不也沒有專門從頭開發一款ide么。ide真不是這么容易弄得,關鍵是要花大量時間。另一個原因就是Go的開發者unix,plan9的背景很深,所以更喜歡命令行環境,它不是也沒有X的庫么,不過以後可能會往這方面發展。Go官方的態度是,我們不負責開發ide,但我們會盡量開發出一系列的工具鏈來支持ide(比如格式化器,靜態分析器,調試器這些,現在已有的:Gofmt,Golist,pprof,gofix,Gooracle,以後可能還會開發一個debugger,gdb對goroutine支持的太差等等)。比如說Go的開發者基數到達一定程度後,jetbrains這個ide專業戶就會為Go開發ide(它現在為oc開發了ide,正在為c/c++開發ide),它所做的就是把Go已有的工具鏈用圖形界面的形式整合起來就行。本答案來自於互聯網,僅供參考學習作用如果您對我的回答有不滿意的地方,還請您繼續追問;答題不易,互相理解,互相幫助!
⑽ golang怎麼查看rpc調用信息
golang怎麼查看rpc調用信息
為了方便網頁和Android應用的交互,Android系統提供了WebView中JavaScript網頁腳本調用Java類方法的機制。只要調用addJavascriptInterface方法即可映射一個Java對象到JavaScript對象上。
1、映射Java對象到JavaScript對象上
代碼如下:
mWebView = (WebView) findViewById(R.id.wv_content);
mWebView.setVerticalScrollbarOverlay(true);
final WebSettings settings = mWebView.getSettings();
settings.setSupportZoom(true);
//WebView啟用Javascript腳本執行
settings.setJavaScriptEnabled(true);
settings.(true);
//映射Java對象到一個名為」js2java「的Javascript對象上
//JavaScript中可以通過"window.js2java"來調用Java對象的方法
mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java");