在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/ GO問(wèn)答
九年囚 回答

Struct values encode as JSON objects. Each exported struct field becomes a member of the object unless

  • the field's tag is "-", or
  • the field is empty and its tag specifies the "omitempty" option.

The empty values are false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero. The object's default key string is the struct field name but can be specified in the struct field's tag value. The "json" key in the struct field's tag value is the key name, followed by an optional comma and options. Examples:

// Field is ignored by this package.
Field int json:"-"

// Field appears in JSON as key "myName".
Field int json:"myName"

// Field appears in JSON as key "myName" and
// the field is omitted from the object if its value is empty,
// as defined above.
Field int json:"myName,omitempty"

// Field appears in JSON as key "Field" (the default), but
// the field is skipped if empty.
// Note the leading comma.
Field int json:",omitempty"
The "string" option signals that a field is stored as JSON inside a JSON-encoded string. It applies only to fields of string, floating point, integer, or boolean types. This extra level of encoding is sometimes used when communicating with JavaScript programs:

Int64String int64 json:",string"
The key name will be used if it's a non-empty string consisting of only Unicode letters, digits, dollar signs, percent signs, hyphens, underscores and slashes.

GO官方Json包

耍太極 回答

好吧,問(wèn)了一圈終于在某個(gè)群里有大神回答我了,這是golang的bug,詳見(jiàn)https://github.com/golang/go/...

墨小白 回答

api中,你不應(yīng)該暴露key和加密方法到客戶端,你應(yīng)該采用https + 用戶token的方式訪問(wèn)你后端接口

慢半拍 回答

你現(xiàn)在init 中的Db是一個(gè)局部變量,并不是你var聲明的Db

package main

import (
    "database/sql"
    _ "-/github.com/go-sql-driver/mysql"
    "log"
    "fmt"
)

var Db *sql.DB

func init()  {
    var err error  // 首先聲明出來(lái)err
    Db , err = sql.Open("mysql","root:root@tcp(localhost:3306)/sql")
    if err != nil {
        log.Fatal(err)
    }
    Db.Ping()
    fmt.Println(Db)
}

func main()  {
    fmt.Print(Db)
}

這樣就可以了

凝雅 回答

大致上跟其它編譯到機(jī)器碼的語(yǔ)言一樣:別人只能看匯編了。

不過(guò),「故考慮把核心部分換語(yǔ)言重構(gòu)」,如果你考慮在同一進(jìn)程里同時(shí)使用 Go 和另一種語(yǔ)言,特別是解釋型語(yǔ)言的話,還是放棄吧。Go 和 C 之間的調(diào)用已經(jīng)被 Go 核心開(kāi)發(fā)者警告了(請(qǐng)搜索「cgo is not go」;你沒(méi)看到 Go 語(yǔ)言的項(xiàng)目都是自個(gè)兒干活,極少有混編的情況),和其它大運(yùn)行時(shí)的程序調(diào)……你饒了你自己吧。

出于代碼保護(hù)目的,建議使用 Rust,和 Python、Ruby、Lua、NodeJS、Haskell、C、C++ 等等語(yǔ)言相互調(diào)用都容易得多。

抱緊我 回答
背景
目前項(xiàng)目中會(huì)使用了Iaas中的vm,所有操作都是通過(guò)ssh連上去的。pm表示要不要寫個(gè)agent在里面用,現(xiàn)在每次操作都ssh一下都很惡心。

談?wù)勎艺J(rèn)為使用ssh的好處:
代碼集中在一處,不需要分發(fā)
不需要維護(hù)agent這么一個(gè)進(jìn)程的生命周期,以及檢測(cè)它的心跳
缺點(diǎn):

不支持異步
我想問(wèn)的問(wèn)題
ssh的開(kāi)銷大嗎?在我看來(lái)似乎和寫一個(gè)基于web server 的agent差不多
大家一般是如何選型的?為什么這么選?

這個(gè)東西以前做過(guò)類似的,也有過(guò)反思,甚至設(shè)計(jì)的原型和你說(shuō)的一模一樣。

例如,我為什么要用基于web server的agent呢,我干嘛不用tcp長(zhǎng)連接到服務(wù)端,這樣執(zhí)行的結(jié)果可以流式傳輸?shù)秸{(diào)用方,他那邊顯示起來(lái)比較平滑,不用每個(gè)命令執(zhí)行完等結(jié)果。
但是我這樣搞的話,中控端流量和日志存儲(chǔ)就成了問(wèn)題了啊。
如果我的業(yè)務(wù)都在云上,如果不同機(jī)房網(wǎng)絡(luò)不互通的話,我又要蛋疼地搞點(diǎn)兼容的事情……
例如,agent的生命周期,為什么我要檢測(cè)她的心跳呢?機(jī)器上萬(wàn)臺(tái)的話,任何可能的事情都會(huì)發(fā)生啊,修復(fù)起來(lái)太蛋疼了。但是我不處理的話……所以后面我會(huì)考慮用ssh來(lái)修復(fù)agent啊。

我假設(shè)你所有的機(jī)器都是linux,發(fā)行版為同一種。

SSH:

  1. 依賴于ssh的速度,一旦網(wǎng)絡(luò)抖動(dòng),ssh操作便會(huì)失敗。(低概率/風(fēng)險(xiǎn))
  2. 依賴于key,如果你安全策略不夠嚴(yán)謹(jǐn),或者管理比不嚴(yán)格的話,那么必然會(huì)造成root key的泛濫。(安全風(fēng)險(xiǎn)高)
  3. 開(kāi)源技術(shù)很成熟,你很容易就能用幾行python包裝出一個(gè)比較完善的腳本,或者寫出一個(gè)ansible的配置。(用起來(lái)簡(jiǎn)單)

AGENT:

  1. 依賴于中控端。如果你不打算搞個(gè)中控端,那和ssh沒(méi)本質(zhì)區(qū)別。
  2. 其實(shí)和SSH一樣,依賴于網(wǎng)絡(luò),一旦抖動(dòng)也會(huì)出問(wèn)題。
  3. 保活。如果你的公司稍微大點(diǎn)的話,會(huì)有各種亂七八糟的原因能讓你的agent不起作用,甚至被kill。雖然處理起來(lái)沒(méi)啥問(wèn)題,但是這個(gè)活總得有人來(lái)干。(低風(fēng)險(xiǎn))
  4. 維護(hù)。(成本中等)
  5. agent其實(shí)可以不用中間代碼,因?yàn)橐环矫婀ぷ髁勘容^大,一方面教育成本和學(xué)習(xí)成本也比較高。只是向agent下發(fā)shell腳本、python腳本等也可以完成相同的功能,沒(méi)問(wèn)題的。

大公司有各種審計(jì)、安全方面的需求,會(huì)把這種事情統(tǒng)一到某個(gè)地方,搞個(gè)中控端,所有的批量操作必須通過(guò)中控端。模式也不一樣,有些用agent,有些用ssh,只有中控端才是必須要有的。

再說(shuō)的直白點(diǎn),
你是個(gè)小公司,小于30臺(tái)機(jī)器或者小于50臺(tái)機(jī)器的話,不建議考慮agent模式。
沒(méi)那個(gè)需求,投入的成本大而收效低。
基于各種第三方框架包裝一個(gè)就好了嘛,嫌麻煩就ansible用起。

賤人曾 回答

23333,你這個(gè)是最經(jīng)典的函數(shù)防抖應(yīng)用場(chǎng)景。

使函數(shù)在一定的時(shí)間內(nèi)不被再調(diào)用后執(zhí)行。

也就是說(shuō),當(dāng)你觸發(fā)scroll或者change時(shí),不要直接去修改數(shù)據(jù),而是添加一個(gè)定時(shí)器來(lái)執(zhí)行修改數(shù)據(jù)的操作,在下次觸發(fā)函數(shù)時(shí),清除這個(gè)定時(shí)器,然后重新設(shè)置定時(shí)器。

或者說(shuō)用函數(shù)節(jié)流的方式也可以實(shí)現(xiàn)你的效果。

// 函數(shù)節(jié)流的實(shí)現(xiàn)方案
let throttleIdentify = 0
$dragable.addEventListener('mousemove', () => {
  if (throttleIdentify) return
  throttleIdentify = setTimeout(() => throttleIdentify = 0, 500)
  console.log('trigger')
})

// 函數(shù)防抖方案
let debounceIdentify = 0
window.addEventListener('resize', () => {
  debounceIdentify && clearTimeout(debounceIdentify)
  debounceIdentify = setTimeout(() => {
    console.log('trigger')
  }, 300)
})

看選擇咯,目的都是限制函數(shù)執(zhí)行的頻率。
這里有一篇之前的博客可以參考:函數(shù)節(jié)流與函數(shù)防抖

祈歡 回答

Access-Control-Allow-Origin 添加這個(gè)響應(yīng)頭就可以了,
Option第一次請(qǐng)求的時(shí)候,發(fā)現(xiàn)存在這個(gè)頭,并且這個(gè)頭的設(shè)置允許你的域名就可以返回200 ,然后客戶端再次發(fā)起真正的請(qǐng)求

看你對(duì)并發(fā)的需求,如果并發(fā)量很大,還是需要連接池的

糖果果 回答

https://github.com/go-kit/kit 是一個(gè)微服務(wù)工具包,再搭配使用webserver https://github.com/gin-gonic/gin 可以很好的實(shí)現(xiàn)微服務(wù)架構(gòu)

心癌 回答
  1. 先用netstat -aon確認(rèn)一下是否在監(jiān)聽(tīng)0.0.0.0,以及端口號(hào)是否正確。
  2. 然后確認(rèn)pc的防火墻關(guān)閉
  3. 確認(rèn)手機(jī)和pc在一個(gè)局域網(wǎng)里(手機(jī)不要通過(guò)數(shù)據(jù)上網(wǎng))
黑與白 回答
type Images struct {
        //內(nèi)部屬性都要大寫字母開(kāi)頭,屬性節(jié)點(diǎn)的名稱變量名固定為XMLName,內(nèi)部的文本統(tǒng)一叫innerxml
        Index     int    `xml:"index,attr"` //表示屬性
        InnerText string `xml:",innerxml"`  //表示文本
    }
    type Mimages struct {
        XMLName xml.Name `xml:"moreImages"`
        Img     []Images `xml:"img"`
    }

片段:

var _moreImages []Images
                        for i, v := range _imgs {
                            if i == 0 {
                                _firstImg = v
                            } else {
                                _moreImages = append(_moreImages, Images{InnerText: v, Index: i})
                            }
                        }
                        moreImages := Mimages{Img: _moreImages}
萢萢糖 回答

你要取map中的值,無(wú)論是原生map還是sync.Map,難免會(huì)遇到值拷貝,除非你存進(jìn)去的是一個(gè)指針/地址,大的“對(duì)象”可以存指針進(jìn)去。
此外,sync.Map底層使用的是interface{}作為鍵值對(duì),因此效率不是很高,可以參考一下gf框架的gmap包,以下是基準(zhǔn)測(cè)試結(jié)果:

john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gmap$ go test *.go -bench=".*"
goos: linux
goarch: amd64
BenchmarkGmapSet-8            10000000           181 ns/op
BenchmarkSyncmapSet-8          5000000           366 ns/op
BenchmarkGmapGet-8            30000000            82.6 ns/op
BenchmarkSyncmapGet-8         20000000            95.7 ns/op
BenchmarkGmapRemove-8         20000000            69.8 ns/op
BenchmarkSyncmapRmove-8       20000000            93.6 ns/op
PASS
ok      command-line-arguments    27.950s
離殤 回答

你的需求看上去不是簡(jiǎn)單的腳本能夠解決的,更偏向于開(kāi)發(fā)一個(gè)系統(tǒng)了。
這個(gè)有不少的開(kāi)源軟件,zabbix nagios.等等。

如果你自己開(kāi)發(fā),可能要考慮到數(shù)據(jù)采集,數(shù)據(jù)處理,界面展示。
實(shí)際上做完這些基本可以說(shuō)是一個(gè)全棧工程師了。后臺(tái)接口的設(shè)計(jì),數(shù)據(jù)表設(shè)計(jì),前端圖表等等。

如果你的時(shí)間充足,能力強(qiáng),這個(gè)過(guò)程還是非常的有收獲。

基于監(jiān)控方式,可以參考開(kāi)源軟件,或者自己根據(jù)實(shí)際需求出發(fā)。監(jiān)控這個(gè)話題太大,我簡(jiǎn)單的從總體角度出發(fā)去闡述。

硬扛 回答

謝邀

你可以參考以下步驟

1、解決項(xiàng)目依賴問(wèn)題:

使用 govendor、dep 這類工具,將項(xiàng)目依賴放到 myapp 項(xiàng)目下的 vendor 包下

2、Golang 應(yīng)用打包 docker 鏡像:

參考文章 Gin實(shí)踐 連載九 將Golang應(yīng)用部署到Docker

3、推送鏡像到線上部署

那么你首先要把你打包好的鏡像給上傳到鏡像庫(kù),才能夠達(dá)到 pull 到 生產(chǎn)環(huán)境
(打包本地鏡像 -》 上傳遠(yuǎn)程鏡像庫(kù) -》 從遠(yuǎn)程鏡像庫(kù)拉取所需鏡像)

  • 使用 Docker Hub
  • 使用國(guó)內(nèi)其他提供商
  • 公司搭個(gè)私有的,也不難(內(nèi)部的基本采用這種)

大致思路如上,跟著查和做就可以解決你的問(wèn)題了

舊言 回答

建議去學(xué)習(xí)一下sftpfs庫(kù),獲取方式如下:

go get github.com/spf13/afero/sftpfs

這些現(xiàn)成的庫(kù),可以免去你的很多工作。

念舊 回答
是不是我只有一臺(tái)服務(wù)器就沒(méi)有必要用rpc?

不是的, 你裝的操作系統(tǒng)進(jìn)程間通信大量的大用rpc技術(shù),因?yàn)楫?dāng)軟件復(fù)雜到一定程度時(shí)需要通過(guò)模塊化解耦,便于分別升級(jí)維護(hù),便于團(tuán)隊(duì)開(kāi)發(fā)。

rpc是不是要可以用于遠(yuǎn)程的客戶端服務(wù)器通信?

可以的,http-rpc了解下。處理好現(xiàn)在的微服務(wù)也是類似的概念,需要做的是處理好安全,和流量管理的問(wèn)題,這些都有現(xiàn)成的方案。問(wèn)題是哪種技術(shù)更適合。

rpc是否可以跨語(yǔ)言?

當(dāng)然沒(méi)問(wèn)題,跨平臺(tái)跨語(yǔ)言的早就發(fā)明出來(lái)了。但如果用同一種語(yǔ)言的序列化方式,顯然會(huì)更方便也效率更高,成本更低,前提是你沒(méi)有跨語(yǔ)言的要求。

茍活 回答

可以從「先優(yōu)化數(shù)據(jù)結(jié)構(gòu)」再「查找」方向思考。

真實(shí)場(chǎng)景下,300w 條的數(shù)據(jù)量,可以考慮引入數(shù)據(jù)庫(kù)了