Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 28

0
votes
answers
15 views
+10

從結構中編碼xml

-2

我是新來的,試圖讓下面一段代碼無法運行。看起來我沒有正確編碼結構的結構部分。幫幫我!從結構中編碼xml

package main 

import (
    "encoding/xml" 
    "fmt" 
    "os" 
) 

func main() { 

    type Person struct { 
     Email string `xml:"email"` 
     Phone string `xml:"phone"` 
    } 

    type Host struct { 
     Hostname string `xml:"hostname"` 
     Address string `xml:"address"` 
    } 

    type Asset struct { 
     person Person 
     host Host 
    } 

    p := &Person{Email: "[email protected]", Phone: "1111"} 
    h := &Host{Hostname: "boxen", Address: "1 Place St"} 
    a := &Asset{person: *p, host: *h} 

    enc := xml.NewEncoder(os.Stdout) 
    enc.Indent(" ", " ") 
    if err := enc.Encode(p); err != nil { 
     fmt.Printf("error: %v
", err) 
    } 
    if err := enc.Encode(h); err != nil { 
     fmt.Printf("error: %v
", err) 
    } 
    if err := enc.Encode(a); err != nil { 
     fmt.Printf("error: %v
", err) 
    } 
} 

Go playground here

預期輸出。我目前得到的是一個空的資產元素。

<Asset> 
    <Person> 
    <email>[email protected]</email> 
    <phone>1111</phone> 
    </Person> 
    <Host> 
    <hostname>boxen</hostname> 
    <address>1 Place St</address> 
    </Host> 
</Asset> 
+1

你能更具體?它不起作用的是什麼,你想要它做什麼,它實際上做了什麼? – Adrian

+1

我是第二個@Adrian說的,而且還要做任何編碼/解碼你必須導出你的領域,資產沒有。 – mkopriva

沙发
0
1

你必須使自己的名字開始用大寫字母導出「資產」類型的屬性:

type Asset struct { 
    Person Person 
    Host Host 
} 
板凳
0
3

只要personhost是導出,也沒有辦法爲enc.Encode瞭解他們。導出它們會給你想要的輸出。

package main 

import (
    "encoding/xml" 
    "fmt" 
    "os" 
) 

func main() { 

    type Person struct { 
     Email string `xml:"email"` 
     Phone string `xml:"phone"` 
    } 

    type Host struct { 
     Hostname string `xml:"hostname"` 
     Address string `xml:"address"` 
    } 

    type Asset struct { 
     Person Person 
     Host Host 
    } 

    p := &Person{Email: "[email protected]", Phone: "1111"} 
    h := &Host{Hostname: "boxen", Address: "1 Place St"} 
    a := &Asset{Person: *p, Host: *h} 

    enc := xml.NewEncoder(os.Stdout) 
    enc.Indent(" ", " ") 

    if err := enc.Encode(a); err != nil { 
     fmt.Printf("error: %v
", err) 
    } 
} 
0
votes
answers
39 views
+10

如何在Google跟蹤代碼管理器中添加AdSense

0

我想使用Google跟蹤代碼管理器來投放AdSense,因此我也可以使用其他來源的其他廣告。我在這些網站上找到了很少的答案,但還不足以理解。如果可以在GTM中使用Adsense代碼,我將不勝感激,如果是的話,怎麼樣?如果我必須使用DFP廣告管理系統,那麼我還會使用DFP廣告管理系統。如何在Google跟蹤代碼管理器中添加AdSense

沙发
0
0

我假設您已在您的網站上運行Google跟蹤代碼管理器(GTM)?

  1. 點擊您的GTM工作區中屏幕的左側變量
  2. 創建一個新的用戶定義的變量,並把它asClientID
  3. 配置變量作爲一個常量。輸入的值是您的AdSense客戶端ID
  4. 點擊您的GTM工作區中屏幕的左側標籤
  5. 創建一個新的標籤稱爲 - 頁面視圖 - ALL
  6. 因爲沒有內置在GTM for AdSense中您需要使用自定義HTML標記。
  7. 將下面顯示的HTML代碼複製並粘貼到GTM中。
  8. 選擇觸發所有的網頁瀏覽
  9. 測試您的更改在預覽模式下
  10. 在確定一切正常發佈更改到LIVE。

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 
 
<script> 
 
    (adsbygoogle = window.adsbygoogle || []).push({ 
 
    google_ad_client: "{{asClientID}}", 
 
    enable_page_level_ads: true 
 
    }); 
 
</script>

正如你可以看到,我們使用{{asClientID}}在其中您在步驟1和2中創建的原因創建這個變量是靈活的腳本。如果您需要更改ID,請在變量內而不是在代碼內更改ID。

注意:通過GTM實施AdSense不是最佳實踐,但它是可能的。

希望這是你在找什麼。請讓我知道它是否適合你。 :-)

+0

需要在和字段之間添加廣告正義代碼,該如何實現? – Gabson

0
votes
answers
70 views
+10

Google Home和FHEM?

1

我真的不喜歡使用IFTTT等來控制我的智能家居。一切都使用fhem連接,我不想在這方面做任何改變。但Google Home/Google Assistant無法真正控制文件。只使用IFTTT,外部控制fhem等。我只想讓Google智能助理通過我的wifi控制fhem,而不是使用Google的服務器。Google Home和FHEM?

有什麼辦法可以在本地控制它嗎? Huebridge,wemore等全部不起作用...

x使用Googles Speech API或許更好嗎?它是否也像Google助手一樣認可我?

x或者我可以使用我的RPi上的Assistant SDK添加要同步到Google Home(Mini)的命令嗎?所以這些命令遍歷GASDK並且可以傳給fhem?

x還是可以用Api.ai來完成?這很複雜,我知道的就像Alexa的愚蠢的技能。每次您必須確認要與操作對話時(請參閱Google開發人員網站的示例)。

o還是真的只有IFTTT的機會?我沒有一個安全系統,或者可以用fhem來控制,所以當有人通過了解地址和命令「攻擊」我的文件時並不是那麼糟糕。

謝謝您的回答,

的Fabian

(再次錯誤的網站?認爲適合的只有一個堆棧溢出)

+0

你的問題令人難以置信的模糊和混亂。您是否正在嘗試編程以使用物聯網設備? – Prisoner

沙发
0
0

如果您正在尋找與谷歌主頁和本地控制它的Google智能助理 - 你不能。 Google智能助理依靠雲控制來執行其大部分操作。由於大多數物聯網都有基於雲的解決方案,因此這是一個合理的假設。

板凳
0
1

@囚徒的答案是正確的,你想要的行爲是不可行的。我不確定IFTTT能力的程度,所以我不認爲任何本地控制是可能的。

您可以將Raspberry Pi連接到Internet並運行Smart Home腳本,該腳本將接收來自Google智能助理的請求並將其路由到網絡上的設備。

這隻需要一個面向Internet的Raspberry Pi和一些簡單的邏輯來處理JSON有效載荷。您不需要使用Google智能助理SDK。

如果您確實使用了SDK,則無法將「同步」命令轉換爲您的Google Home Mini。

API.AI/Dialogflow不是創建智能家居操作的正確方法。使用上述智能家居文檔將爲您提供首選方式。

+0

謝謝,我會嘗試智能家庭腳本的想法 – TECHNOFAB

0
votes
answers
42 views
+10

send_mail在本地工作,但不在生產託管

0

以下工作在本地,但當我將其部署到Digital Ocean的生產託管時,電子郵件不會像我在下面的shell命令(python manage.py shell)上測試一樣發送。 send_mail行剛剛卡在那裏,出現錯誤:[Errno 101]幾分鐘後網絡無法訪問。如何捕獲電子郵件發送中的錯誤?請告知我如何解決這個問題。send_mail在本地工作,但不在生產託管

from django.core.mail import send_mail 
send_mail('test email', 'hello world', '[email protected]', ['[email protected]'],fail_silently=False) 

# Email settings 
EMAIL_USE_TLS = True 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_PASSWORD = 'xxxx' #my gmail password 
EMAIL_HOST_USER = '[email protected]' #my gmail username 
EMAIL_PORT = 587 
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER 
+0

事實證明,數字海洋屏蔽了我的應用程序的SMTP。在我提交支持憑單後,他們解除封鎖後,便開始工作。在同一託管環境中,其他應用程序沒有任何阻塞 – ping

沙发
0
0

你的Django應用程序設置看起來是正確的,但你也應該頭向https://accounts.google.com/DisplayUnlockCaptcha,並確保你能獲得較低的安全應用。

如果您使用的是雙因素驗證,請考慮creating an application-specific password

0
votes
answers
7 views
+10

What is a rune?

What is a rune in Go?

I've been googling but Golang only says in one line: rune is an alias for int32.

But how come integers are used all around like swapping cases?

The following is a function swapcase. What is all the <= and -?

And why doesn't switch have any arguments?

&& should mean and but what is r <= 'z'?

func SwapRune(r rune) rune {
    switch {
    case 'a' <= r && r <= 'z':
        return r - 'a' + 'A'
    case 'A' <= r && r <= 'Z':
        return r - 'A' + 'a'
    default:
        return r
    }
}

Most of them are from http://play.golang.org/p/H6wjLZj6lW

func SwapCase(str string) string {
    return strings.Map(SwapRune, str)
}

I understand this is mapping rune to string so that it can return the swapped string. But I do not understand how exactly rune or byte works here.

0
votes
answers
36 views
+10

AWS Lambda回調被開放的mongodb連接阻塞了嗎?

0

我已經設置了一個AWS lambda來爲我做一些數據保存到MongoDB。我想重新使用連接,所以每次調用lambda時都不必創建新的連接。但是如果我打開db連接,Lambda處理程序的回調不起作用!AWS Lambda回調被開放的mongodb連接阻塞了嗎?

有沒有什麼我做錯了多數民衆贊成創造這種??行爲?這是我的代碼:

var MongoClient = require('mongodb').MongoClient 

exports.handler = (event, context, callback) => { 
    MongoClient.connect(process.env.MONGOURL, function (err, database) { 
     //database.close(); 
     callback(null, "Successful db connection") 
    }); 
} 
+0

[從文檔:(http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html)*「在你的lambda函數代碼的任何聲明(外例如,如果您的Lambda函數建立了數據庫連接,而不是重新建立連接,那麼原來的連接將在隨後的調用中使用。 「* –

+0

所以」簡單地說「**相同的答案**用於持久化和共享模塊化代碼(或函數)之間的連接,也適用於一般nodejs應用程序適用於此。請參閱[如何管理Node.js Web應用程序中的MongoDB連接?](https://stackoverflow.com/questions/10656574/how-do-i-manage-mongodb-connections-in-a-node-js- Web應用程序)。它只是你要實現的'getDB()'函數需要被聲明爲任何「處理器」代碼的「外部」,並且在處理程序中你只需獲取該連接的當前「實例」,這是事實「持久化」 。就像文檔說的一樣。 –

+0

@NeilLunn必須告訴Lambda不要等待事件循環爲空,而是要繼續並返回結果並凍結容器。 –

沙发
0
1

這是由於未設置context.callbackWaitsForEmptyEventLoop = false而導致的。如果保留默認true,回調不會導致Lambda返回響應,因爲您的數據庫連接將事件循環保持爲空。

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

+0

完美!謝謝! – AlexKogan

0
votes
answers
32 views
+10

在所有服務啓動後啓動node.js應用程序

0

例如我有兩個服務:db和隊列 我需要在db和amqp連接到它們的服務器之後啓動服務器。在所有服務啓動後啓動node.js應用程序

現在我有這樣的事情server.js

let mongo = require('./server/db'); 
let qManager = require('./server/amqp'); 

mongo.connect(()=>{ 
    qManager.connect(()=>{ 
     http.listen(3001, function() { 
      console.log('listening on *:3001'); 
     }); 
    }); 
}); 

蒙戈連接方法:

const connectDb = (callback) => { 
    if (state.db) return state.db; 
    let connection = MongoClient.connect(mongoUrl, (err, db) => { 
     if (err) { 
      connectDb(); 
     } 
     state.db = db; 
     console.log('Mongo connected.'); 
     callback(); 
    }); 
}; 

RabbitMQ的連接方法:

const connect = (callback) => { 
    connection = amqp.connect(url) 
     .then(conn => { 
      module.connection = conn; 
      channel = conn.createChannel(); 
      console.log('Queue connected.'); 
      pythonResultListener(); 

      callback() 
     }) 
     .catch(err => { 
      console.error('Connect failed: %s', err); 
     }); 
    return connection; 
}; 

也許有多大更好的方法?謝謝。

沙发
0
0

處理異步流程有幾種方法。 對於你的具體情況:

非常快EXA mple與async/await

// First you modify your callback function to be promises 
// For example mongoconnect method implementation: 
const connectDb = function() { 
    return new Promise (resolve, reject) => { 
    if (state.db) return state.db; 
    let connection = MongoClient.connect(mongoUrl, (err, db) => { 
     if (err) return reject(err); 
     state.db = db; 
     console.log('Mongo connected.'); 
     resolve(); 
    }); 
    }); 
}; 

而現在,假設你有承諾A,B,C,你的目標是通過一個叫他們一個:

const promises = [ A, B, C ]; 
for (const promiseFunc of promises) { 
    const res = await promiseFunc(); 
    // For cases you need to return something 
    console.log(res); 
} 

更多信息,你可以找到here

板凳
0
0

你做得很好。在啓動服務器之前放置所有init邏輯。直到完成所有初始化後才啓動服務器。

你可以模塊化將獨立的初始化放置在它們各自的模塊中的一件事。這樣你可以很好地管理它們。

0
votes
answers
50 views
+10

MongoDB中

1

進口CSV創建模式,我有一個CSV,看起來像這樣:MongoDB中

Number,Date,ClientName,ClientSurname,ClientAge,Option1,Option2 
    1,01/01/2015,John,Foo,24,30, 

使用mongoimport我得到

{ 
    "_id":ObjectID(""), 
    "Number":1, 
    "date":"01/01/2015", 
    "ClientName":"John", 
    "ClientSurname":"Foo", 
    "ClientAge":24, 
    "Option1":30, 
    "Option2": "", 
    } 

我想是

{ 
    "_id":ObjectID(""), 
    "Number":1, 
    "date":"01/01/2015", 
    "Client":[{ 
     "ClientName":"John", 
     "ClientSurname":"Foo", 
     "ClientAge":24, 
    }] 
    "Options":["30"] 
    } 

我試着與導入之前的驗證,但沒有工作,是否有可能改變模式,因爲我想現在我有數據導入,或者我應該使用另一種方法?

沙发
0
0

如果您在CSV標頭中使用虛線字段名稱,mongoimport會自動爲您創建子文檔。但是,這不適用於數組。

例如:

$ cat test.csv 
Number,Date,Client.Name,Client.Surname,Client.Age,Option.0,Option.1 
1,01/01/2015,John,Foo,24,30, 

$ mongoimport -d test -c test --drop --headerline --type=csv test.csv 

> db.test.find() 
{ 
    "_id": ObjectId("5a4f0768c481930d7c589a41"), 
    "Number": 1, 
    "Date": "01/01/2015", 
    "Client": { 
    "Name": "John", 
    "Surname": "Foo", 
    "Age": 24 
    }, 
    "Option": { 
    "0": 30, 
    "1": "" 
    } 
} 

要獲得Option數組,你需要做一些後期處理。

或者,您可以使用單獨的腳本來獲取CSV文件,並使用驅動程序(例如Pymongo)將其插入到MongoDB中。這樣,您就可以完全控制生成的文檔的結構。

+0

謝謝,如果我想引用而不是嵌入客戶端?還需要使用Pymongo還是有其他方法? – doe

+0

@更復雜的導入需求將需要自定義導入代碼,因爲'mongoimport'假設您的數據是每行一個文檔。 –

184
votes
answers
15 views
+10

Decoding JSON in Golang using json.Unmarshal vs json.NewDecoder.Decode

I'm developing an API client where I need to encode a JSON payload on request and decode a JSON body from the response.

I've read the source code from several libraries and from what I have seen, I have basically two possibilities for encoding and decoding a JSON string.

Use json.Unmarshal passing the entire response string

data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
    err = json.Unmarshal(data, value)
}

or using json.NewDecoder.Decode

err = json.NewDecoder(resp.Body).Decode(value)

In my case, when dealing with HTTP responses that implements io.Reader, the second version seems to be require less code, but since I've seen both I wonder if there is any preference whether I should use a solution rather than the other.

Moreover, the accepted answer from this question says

Please use json.Decoder instead of json.Unmarshal.

but it didn't mention the reason. Should I really avoid using json.Unmarshal?

up vote 184 down vote accepted favorite
沙发
+1840
+50

這實際上取決於你的輸入。如果查看Decode方法的實現json.Decoder,它會將整個JSON值緩衝到內存中,然後再將其解組為Go值。因此,在大多數情況下,它將不再具有更高的內存效率(儘管在未來的語言版本中這很容易改變)。

所以更好的經驗法則是:

  • 使用json.Decoder,如果你的數據從一個即將io.Reader流,或者需要多個值,從數據流進行解碼。
  • json.Unmarshal如果您已在內存中擁有JSON數據,請使用此選項。

對於從HTTP請求中讀取的情況,我會選擇,json.Decoder因為您顯然是從流中讀取的。

Also: by inspecting the Go 1.3 source code, we can also learn that for encoding, if you use a json.Encoder, it will reuse a global buffer pool (backed by the new sync.Pool), which should decrease buffer churn a lot if you're encoding a lot of json. There's only one global pool so different json.Encoder's share it. The reason this couldn't be done for the json.Marshal interface is because the bytes are returned to the user and the user doesn't have a way to "return" the bytes to the pool. So if you're doing a lot of encoding, json.Marshal always has quite a bit buffer churn. – Aktau Jun 23 '14 at 11:19

@Flimzy: are you sure? The source code still says it reads the entire value into the buffer before decoding: github.com/golang/go/blob/master/src/encoding/json/…. The Buffered method is there to let you see any extra data that was read into the internal buffer after the value. – James Henstridge Apr 19 '17 at 1:36

@JamesHenstridge: No, you're probably right. I was just interpreting your statement differently than you intended. Apologies for the confusion. – Flimzy Apr 19 '17 at 13:02

0
votes
answers
28 views
+10

在W using中使用圖像標籤時的許多重複查詢

0

我正在爲我的網站項目使用W v1草v1.13.1。我想優化的數據庫查詢...在W using中使用圖像標籤時的許多重複查詢

models.py

class ProductPage(Page): 
    ... 
    main_image = models.ForeignKey(
     'wagtailimages.Image', on_delete=models.SET_NULL, related_name='+', blank=True, null=True 
    ) 

class ProductIndexPage(Page): 
    ... 
    def get_context(self, request, *args, **kwargs): 
     context = super(ProductsIndexPage, self).get_context(request) 
     all_products = ProductPage.objects 
      .prefetch_related('main_image__renditions') 
      .live() 
      .public() 
      .descendant_of(self) 
      .order_by('-first_published_at') 
     paginator = Paginator(all_products, 10) 
     page = request.GET.get('page') 
     try: 
      products = paginator.page(page) 
     except PageNotAnInteger: 
      products = paginator.page(1) 
     except EmptyPage: 
      products = paginator.page(paginator.num_pages) 
     context['products'] = products 
     return context 

product_index_page.html

我在輸出產品的卡環。每個產品卡都有這個標籤:

{% image product.main_image fill-600x300 %} 

但是仍然會對每個圖像分別調用db。

模特們以這種方式連接:

ProductPage --fk - >wagtailimages.Image < --fk-- wagtailimages.Rendition

的問題是:什麼是預取格式並消除重複的數據庫查詢的正確方法?

沙发
0
0

試試這個。

prefetch_related('main_image__rendition_set') 

這是假設圖像模板標籤可以正確使用預取值。

+0

對不起,忘了提到Rendition模型以這種方式將fk定義爲Image模型:image = models.ForeignKey(Image,related_name ='renditions',on_delete = models.CASCADE) – romengrus