真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言開發(fā)板 go語言開發(fā)平臺

golang做后臺開發(fā)有什么優(yōu)勢和劣勢

golang在近些年被追捧,不管某華,某阿在很多服務器開發(fā)上都在使用。

創(chuàng)新互聯(lián)是專業(yè)的扎賚特網(wǎng)站建設公司,扎賚特接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行扎賚特網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

你不用懷疑golang的

優(yōu)勢:部署簡單,良好的語言設計,并發(fā)性好,性能優(yōu)良,開發(fā)簡潔快,標準庫強大,編譯簡單

缺點:還存在一些缺陷(例如垃圾回收),缺少安全檢查,性能方面目前比不過java,第三方庫不及java

但作為新興語種,我們不用擔心,背后有谷歌支持和java持平也就是時間上的問題。

而且前面還有某華,某阿頂著不怕。

GO語言是什么語言?我們應該怎么學?

Go語言是谷歌推出的一種全新的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā)Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪。

Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應用的一種BASIC語言.

北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。

谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗到了從未有過的開發(fā)效率。"派克表示,今天的C++或C一樣,Go是一種系統(tǒng)語言。他解釋道,"使用它可以進行快速開發(fā),同時它還是一個真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認為它已經(jīng)非常有用和強大。"

2007年,谷歌把Go作為一個20%項目開始研發(fā),即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發(fā)。

派克表示,編譯后Go代碼的運行速度與C語言非常接近,而且編譯速度非??欤拖裨谑褂靡粋€交互式語言?,F(xiàn)有編程語言均未專門對多核處理器進行優(yōu)化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學者設計的,但學習使用它也不是非常困難。Go支持面向?qū)ο?,而且具有真正的閉包(closures)和反射 (reflection)等功能。

在學習曲線方面,派克認為Go與Java類似,對于Java開發(fā)者來說,應該能夠輕松學會 Go。之所以將Go作為一個開源項目發(fā)布,目的是讓開源社區(qū)有機會創(chuàng)建更好的工具來使用該語言,例如 Eclipse IDE中的插件。

在谷歌公開發(fā)布的所有網(wǎng)絡應用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應用完美的運行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。

Go 同時具有兩種編譯器,一種是建立在GCC基礎上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設備的支持。派克表示,"Android手機存在的問題是,我們一直沒有一個數(shù)學協(xié)處理器。"

如何在 Go 語言中用 Beats 開發(fā) Logstash 插件

配置環(huán)境

在OSX系統(tǒng)上很容易安裝GO的可執(zhí)行文件:

brew?install?go

雖然Java或Ruby?(或者任何我知道的語言)?可以在本地文件系統(tǒng)的任何地方使用命令,,但是Go項目必須使用單一專用的地址,,并且在$GOPATH環(huán)境變量下可用。

第?1?段(可獲?1.54?積分)

R?e;?7個月前?

創(chuàng)建項目對于Logstash插件,Beats項目可以從模板創(chuàng)建。官方文檔的說明十分簡單。鑒于Go對文件系統(tǒng)上的位置的嚴格要求,只需按照以下說明生成一個新的即可使用的Go項目。默認模板代碼將在控制臺中重復發(fā)送帶增量計數(shù)器的事件:./redditbeat?-e?-d?"*"

2016/12/13?22:55:56.013362?beat.go:267:?INFO

Home?path:?[/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat]

Config?path:?[/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat]

Data?path:?[/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/data]

Logs?path:?[/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/logs]

2016/12/13?22:55:56.013390?beat.go:177:?INFO?Setup?Beat:?redditbeat;?Version:?6.0.0-alpha1

2016/12/13?22:55:56.013402?processor.go:43:?DBG??Processors:?

2016/12/13?22:55:56.013413?beat.go:183:?DBG??Initializing?output?plugins

2016/12/13?22:55:56.013417?logp.go:219:?INFO?Metrics?logging?every?30s

2016/12/13?22:55:56.013518?output.go:167:?INFO?Loading?template?enabled.?Reading?template?file:

/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/redditbeat.template.json

2016/12/13?22:55:56.013888?output.go:178:?INFO?Loading?template?enabled?for?Elasticsearch?2.x.?Reading?template?file:

/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/redditbeat.template-es2x.json

2016/12/13?22:55:56.014229?client.go:120:?INFO?Elasticsearch?url:?

2016/12/13?22:55:56.014272?outputs.go:106:?INFO?Activated?elasticsearch?as?output?plugin.

2016/12/13?22:55:56.014279?publish.go:234:?DBG??Create?output?worker

2016/12/13?22:55:56.014312?publish.go:276:?DBG??No?output?is?defined?to?store?the?topology.

The?server?fields?might?not?be?filled.

2016/12/13?22:55:56.014326?publish.go:291:?INFO?Publisher?name:?LSNM33795267A

2016/12/13?22:55:56.014386?async.go:63:?INFO?Flush?Interval?set?to:?1s

2016/12/13?22:55:56.014391?async.go:64:?INFO?Max?Bulk?Size?set?to:?50

2016/12/13?22:55:56.014395?async.go:72:?DBG??create?bulk?processing?worker?(interval=1s,?bulk?size=50)

2016/12/13?22:55:56.014449?beat.go:207:?INFO?redditbeat?start?running.

2016/12/13?22:55:56.014459?redditbeat.go:38:?INFO?redditbeat?is?running!?Hit?CTRL-C?to?stop?it.

2016/12/13?22:55:57.370781?client.go:184:?DBG??Publish:?{

"@timestamp":?"2016-12-13T22:54:47.252Z",

"beat":?{

"hostname":?"LSNM33795267A",

"name":?"LSNM33795267A",

"version":?"6.0.0-alpha1"

},

"counter":?1,

"type":?"redditbeat"

}

第?2?段(可獲?0.73?積分)

R?e;?7個月前?

關于命令行參數(shù):-e記錄到標準err,而-d“*”啟用所有調(diào)試選擇器。有關參數(shù)的完整列表,請鍵入./redditbeat?--help。編碼Go代碼位于.go文件中(令人驚訝...)在$?GOPATH?/?src文件夾的項目子文件夾中。配置類型第一個有趣的文件是config?/?config.go,它定義了一個結構來聲明Beat的可能參數(shù)。至于前面的Logstash插件,讓我們添加一個subreddit參數(shù),并設置它的默認值:type?Config?struct?{

Period?time.Duration?`config:"period"`

Subreddit?string?`config:"subreddit"`

}

var?DefaultConfig?=?Config?{

Period:?15?*?time.Second,

Subreddit:?"elastic",

}

第?3?段(可獲?0.89?積分)

R?e;?7個月前?

Beater?TypeBeat本身的代碼在beater?/?redditbean.go中找到。默認模板為Beat和三個函數(shù)創(chuàng)建一個struct:Beat構造函數(shù)—用來讀取配置:?func?New(b?*beat.Beat,?cfg?*common.Config)?(beat.Beater,?error)?{?...?}?

Run?函數(shù)-?需要覆蓋Beat的主要功能:?func?(bt?*Redditbeat)?Run(b?*beat.Beat)?error?{?...?}?

Stop?函數(shù)管理優(yōu)雅關閉:?func?(bt?*Redditbeat)?Stop()?{?...?}?

Note?1:在Go中沒有明確的接口實現(xiàn)。實現(xiàn)了?interface?中的所有方法,即創(chuàng)建一個隱式繼承關系.?出于寫文檔的目的,這是?Beater?接口:type?Beater?interface?{

Run(b?*Beat)?error

Stop()

}

第?4?段(可獲?0.93?積分)

R?e;?7個月前?

因此,由于Beat結構實現(xiàn)了Run和Stop,它是一個Beater。Note?2:?在Go中沒有類的概念,所以方法不能在一個具體類型上聲明。但是,它存在擴展函數(shù)的概念:可以添加行為到一個類型(在單個包中)的函數(shù)。它需要聲明receiver?類型:這是在fun關鍵字和函數(shù)名之間完成的?-?這里是指Redditbeat類型(或者更準確地說,是一個指向Redditbeat類型的指針,但是這里有一個隱式轉(zhuǎn)換)。構造函數(shù)和Stop函數(shù)可以保持不變,無論什么特性都應該在Run函數(shù)中。在這種情況下,功能是調(diào)用Reddit?REST?API并為每個Reddit帖子發(fā)送一條消息。

第?5?段(可獲?1.59?積分)

R?e;?7個月前?

最終代碼如下所示:func?(bt?*Redditbeat)?Run(b?*beat.Beat)?error?{

bt.client?=?b.Publisher.Connect()

ticker?:=?time.NewTicker(bt.config.Period)

reddit?:=?""?+?bt.config.Subreddit?+?"/.json"

client?:=?http.Client?{}

for?{

select?{

case?-bt.done:

return?nil

case?-ticker.C:

}

req,?reqErr?:=?http.NewRequest("GET",?reddit,?nil)

req.Header.Add("User-Agent",?"Some?existing?header?to?bypass?429?HTTP")

if?(reqErr?!=?nil)?{

panic(reqErr)

}

resp,?getErr?:=?client.Do(req)

if?(getErr?!=?nil)?{

panic(getErr)

}

body,?readErr?:=?ioutil.ReadAll(resp.Body)

defer?resp.Body.Close()

if?(readErr?!=?nil)?{

panic(readErr)

}

trimmedBody?:=?body[len(prefix):len(body)?-?len(suffix)]

messages?:=?strings.Split(string(trimmedBody),?separator)

for?i?:=?0;?i??len(messages);?i?++?{

event?:=?common.MapStr{

"@timestamp":?common.Time(time.Now()),

"type":???????b.Name,

"message":????"{"?+?messages[i]?+?"}",

}

bt.client.PublishEvent(event)

}

}

}

第?6?段(可獲?0.09?積分)

R?e;?7個月前?

這里是對最重要的幾部分的解釋:line?4:?通過連接字符串創(chuàng)建Reddit?REST?URL,包括配置Subreddit參數(shù)。記住,它的默認值已在config.go文件中定義。line?5:?引用httpClient類型line?12:?創(chuàng)建新的HTTP請求。注意Go允許多個返回值。line?13:?如果沒有設置標準請求頭,Reddit的API將返回429狀態(tài)碼。line?14:?Go標準錯誤不通過異常處理,而是隨著常規(guī)返回值返回。根據(jù)Golang?wiki:指示調(diào)用者的錯誤條件,應通過返回錯誤值來完成line?15:?panic()?函數(shù)類似于在Java中拋出異常,?被處理時推到棧頂。?有關詳細信息,請查看相關文檔。line?17:?執(zhí)行HTTP請求。line?21:?將響應主體讀入字節(jié)數(shù)組。line?22:?關閉主體流。注意defer關鍵字:defer語句延遲函數(shù)的執(zhí)行,直到環(huán)繞的函數(shù)返回。line?26:?創(chuàng)建整個響應主體字節(jié)數(shù)組的切片?-?對數(shù)組的一部分的引用。實質(zhì)上,它刪除了前綴和后綴以保持相關的JSON值。之后將字節(jié)數(shù)組解析成JSON。line?27:?分割切片以單獨獲取每個JSON片段。line?29:?將消息創(chuàng)建為簡單的字典結構。line?34:?發(fā)送。

第?7?段(可獲?3.11?積分)

R?e;?7個月前?

配置,?構建,?運行默認配置參數(shù)可以在項目根目錄下的redditbeat.yml文件中找到。請注意,redditbeat.full.yml中列出了其他常見的Beat參數(shù),以及相關注釋。關于Beats的一個有趣的事情是,他們的消息可以直接發(fā)送到Elasticsearch或Logstash進行進一步處理。這在上述配置文件中配置。redditbeat:

period:?10s

output.elasticsearch:

hosts:?["localhost:9200"]

output.logstash:

hosts:?["localhost:5044"]

enabled:?true

第?8?段(可獲?0.78?積分)

R?e;?7個月前?

此配置片段將每10秒循環(huán)運行Run方法,并將消息發(fā)送到在localhost上運行的Logstash實例在端口5044上。這可以在運行Beat時被覆蓋(見下文)。注意:為了使Logstash接受來自Beats的消息,必須安裝Logstash?Beat插件,并且必須為Beats配置Logstash的input:input?{

beats?{

port?=?5044

}

}

要構建項目,請在項目的根目錄中鍵入make。它將創(chuàng)建一個可以運行的可執(zhí)行文件。./redditbeat?-e?-E?redditbeat.subreddit=java

-E參數(shù)可以覆蓋在的redditbeat.yml配置文件中找到的參數(shù)(見上文)。在這里,它設置subreddit讀為“java”,而不是默認的“elastic”。

第?9?段(可獲?1.3?積分)

R?e;?7個月前?

輸出如下所示:2016/12/17?14:51:19.748329?client.go:184:?DBG??Publish:?{

"@timestamp":?"2016-12-17T14:51:19.748Z",

"beat":?{

"hostname":?"LSNM33795267A",

"name":?"LSNM33795267A",

"version":?"6.0.0-alpha1"

},

"message":?"{

\"kind\":?\"t3\",?\"data\":?{

\"contest_mode\":?false,?\"banned_by\":?null,?

\"domain\":?\"blogs.oracle.com\",?\"subreddit\":?\"java\",?\"selftext_html\":?null,?

\"selftext\":?\"\",?\"likes\":?null,?\"suggested_sort\":?null,?\"user_reports\":?[],?

\"secure_media\":?null,?\"saved\":?false,?\"id\":?\"5ipzgq\",?\"gilded\":?0,?

\"secure_media_embed\":?{},?\"clicked\":?false,?\"report_reasons\":?null,?

\"author\":?\"pushthestack\",?\"media\":?null,?\"name\":?\"t3_5ipzgq\",?\"score\":?11,?

\"approved_by\":?null,?\"over_18\":?false,?\"removal_reason\":?null,?\"hidden\":?false,?

\"thumbnail\":?\"\",?\"subreddit_id\":?\"t5_2qhd7\",?\"edited\":?false,?

\"link_flair_css_class\":?null,?\"author_flair_css_class\":?null,?\"downs\":?0,?

\"mod_reports\":?[],?\"archived\":?false,?\"media_embed\":?{},?\"is_self\":?false,?

\"hide_score\":?false,?\"spoiler\":?false,?

\"permalink\":?\"/r/java/comments/5ipzgq/jdk_9_will_no_longer_bundle_javadb/\",?

\"locked\":?false,?\"stickied\":?false,?\"created\":?1481943248.0,?

\"url\":?\"\",?

\"author_flair_text\":?null,?\"quarantine\":?false,?

\"title\":?\"JDK?9?will?no?longer?bundle?JavaDB\",?\"created_utc\":?1481914448.0,?

\"link_flair_text\":?null,?\"distinguished\":?null,?\"num_comments\":?4,?

\"visited\":?false,?\"num_reports\":?null,?\"ups\":?11

}

}",

"type":?"redditbeat"

}

android 可以用go 語言嗎

Go語言將支持Android

概述

我們建議將Go語言引入Android平臺,重點是用Go語言編寫游戲程序,API將在Android NDK中定義。

背景

Android平臺被設定為一個多應用操作系統(tǒng),一個相對于傳統(tǒng)UNIX系統(tǒng)來說更依賴于網(wǎng)絡庫和服務的操作系統(tǒng),這意味著我們將為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提供。

在發(fā)布上我們?nèi)匀惶峁┙徊嫫脚_編譯,并且支持在Linux主機上adb工具在Android設備上測試程序。

我們將會提供一個名叫go.mobile的子版本,包含:

1、通過Android NDK對OpenGL,OpenSL和OpenMAX的支持。

2、一個Java-Go的工具,支持通過Java調(diào)用Go的Package,所以許多游戲的菜單UI可以通過標準SDK構建。(有可能會支持通過其他語言調(diào)用Go,比如Objective-C。)

3、集成AndroidStudio

新特性將會在Go1.4穩(wěn)定版中提供。

如何Golang開發(fā)Android應用

如何Golang開發(fā)Android應用:

一丶準備

1.一臺Linux 64的機器

2.一個帶有AndroidStudioIDE的開發(fā)機器

因為環(huán)境配置實在復雜,所以引入的docker。

docker pull codeskyblue/docker-goandroid

docker run --rm -ti codeskyblue/docker-goandroid bash

cd example; echo "view example projects

docker起來之后,什么就都配置好了,NDK,java,GO的環(huán)境變量了,等等,并且還預裝了vim,gradle,tmux,git,syncthing,svn

二丶代碼

1.寫代碼之前,先約定下目錄結構

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#1438;#1438;#1438; # 自動生成的代碼

| ? | ? | ? `-- go_hi.go

| ? | ? `-- hi.go # 需要編寫的代碼

| ? `-- main.go

`-- main

? ?|-- AndroidManifest.xml

? ?|-- java

? ?| ? |-- go # 自動生成的代碼

? ?| ? | ? |-- Go.java

? ?| ? | ? |-- Seq.java

? ?| ? | ? `-- hi

? ?| ? | ? ? ? `-- Hi.java

? ?| ? `-- me/shengxiang/gohello # 主要的邏輯代碼

? ?| ? ? ? ? ? ? ? ? ? ? ?`-- MainActivity.java#1438;#1438;#1438;

? ?`-- res

2.寫了一個例子

git clone

3.編譯下,試試行不行(就算不行問題應該也不大,因為大問題都被消滅了)

cd GoHello/app

./make.bash

../gradlew build

4.一切順利的話在build/outputs/apk下應該可以看到app-debug.apk這個文件。

編譯好的放到qiniu上了,可以點擊下載看看

下面可以嘗試改改

打開hi.go這個文件

hi.go的內(nèi)容,比較簡單,寫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"

}

5.文件末尾添加下面這行代碼

func Welcome(name string) string {

return fmt.Sprintf("Welcome %s to the go world", name)

}

使用./make.bash重新編譯下

6.打開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安裝到手機上試試。


文章名稱:go語言開發(fā)板 go語言開發(fā)平臺
文章地址:http://weahome.cn/article/hgsghe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部