在Golang中,我们使用带接收器方法的结构.一切都很完美到这里.
但是,我不确定接口是什么.我们在结构中定义方法,如果我们想在结构上实现一个方法,我们再次在另一个结构下编写它.
这意味着接口似乎只是方法定义,只占用了页面上额外不需要的空间.
有没有例子解释我为什么需要一个界面?
我正在尝试连接到twitter api的公共流端点.
当我运行示例参数时,我从nodejs中的twitter api测试工具获得我得到的401 unauthorized
错误,你可以看到我的nodejs示例请求
'use strict';
const https = require('https');
const qs = require('querystring');
const obj = {
method: "POST",
headers: {
Authorization: 'OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"'
},
hostname: "stream.twitter.com",
path: "/1.1/statuses/filter.json"
}
https.request(obj,res => {
res.on("data", d => {
console.log(d.toString());
});
}).end(qs.stringify({track:"javascript"}))
Run Code Online (Sandbox Code Playgroud)
但是,如果我发送这个请求curl它完全适用于这里是我的示例curl请求
curl --request 'POST' 'https://stream.twitter.com/1.1/statuses/filter.json' --data 'track=javascript' --header 'Authorization: OAuth oauth_consumer_key="pXZ8xSWvjZjE4UaNntVsCwWPg", oauth_nonce="776f1a4ec0c3ed9ecbfb68aa0f7e2324", oauth_signature="jk8e84V0OcgcepkL7F%2BXt2fAy8o%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463258508", oauth_token="416282416-vFTMVJCFiRW8G6nwoFhH3OBqrJsKDbIJ93sbOm2a", oauth_version="1.0"' --verbose
Run Code Online (Sandbox Code Playgroud)
我做错了什么?他们完全相同的要求.
假设我在编译过程中已经将二进制文件包含在我的程序中,所以我将它保存在变量中,
var myExec =[]byte{'s','o','m','e',' ','b','y','t','e','s'}
所以我的问题是是否有办法在我的程序中执行这个二进制文件而不将其写回光盘并调用exec或fork在上面?我正在Golang中编写我的应用程序,所以我正在寻找的方法是使用Go或C(使用CGO)来完成它.
基本上,我正在寻找类似管道bash脚本到bash的东西,我不知道在哪里可以管道本机可执行文件的字节来运行它并将其写回磁盘,然后让os再次读取它似乎很多额外的工作要做
我正在写一个简单的Twitter登录并尝试获取请求令牌以便重定向用户访问令牌,但我总是最终得到couldn't authenticate you
错误我试图添加签名作为最后一个标题它也不起作用.当我删除一些标题我得到错误的身份验证数据错误所以使用此配置我假设一切正常我只是无法弄清楚我做错了什么并且twitter拒绝发回请求令牌.
这是我的代码
'use strict';
const https = require("https");
const cfg = require('./config');
// const cfg=require(`${__dirname}/config`);
const qs = require("querystring");
const esc = qs.escape;
const crypto = require('crypto');
const HMAC = crypto.createHmac;
class twitter {
constructor(o) {
// if (!o || !o.consumer_key || !o.consumer_secret) throw new Error("Missing Paramaters");
this.id = o.consumer_key;
this.secret = o.consumer_secret;
}
getNonce() {
let num = 32;
let preDefined = Date.now().toString().split("");
num -= preDefined.length;
while (num--) {
preDefined.push(Math.round(Math.random() * 31).toString(32));
}
return (new …
Run Code Online (Sandbox Code Playgroud) 在 ES5 及以下版本中,我可以在 JS 字符串中使用 ANSI 颜色,例如
"\033[31m Hello World\033[0m"
。
使用 ES6 模板字符串时,我收到错误:
SyntaxError: Octal literals are not allowed in template strings.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过\u{31m}
,但也没有成功。
我有一个struct
名为的用户包user
type Account struct {
Tp string `json:"type"bson:"type"`
AccountId string `json:"account_id"bson:"account_id"`
Credentials map[string]interface{} `json:"credentials,omitempty"bson:"credentials,omitempty"`
ProfilePicture string `json:"profile_picture,omitempty"`
Username string `json:"username"bson:"username"`
AccessToken map[string]interface{}`bson:"access_token,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
并account
试图将此帐户结构嵌入另一个结构中
type returnAccount struct {
user.Account
AccessToken string `json:"access_token,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
用户包在尝试嵌入之前已正确导入我正在成功使用它
最后在一个循环我得到用户帐户,并制作一个地图user/accounts
和从我的功能返回这里是我的功能
func getAccounts(usr *user.AuthenticatedUser, id ...string) (accounts map[string]returnAccount) {
accounts = make(map[string]returnAccount)
if len(id) > 0 {
for _, v := range id {
for _, acnt := range usr.Accounts {
if acnt.AccountId == v {
accounts[acnt.AccountId] = returnAccount{ …
Run Code Online (Sandbox Code Playgroud) 我在c语言中看到了一个递归函数示例.
#include <stdio.h>
int sum(int n);
int main(){
int num,add;
printf("Enter a positive integer:\n");
scanf("%d",&num);
add=sum(num);
printf("sum=%d",add);
}
int sum(int n){
if(n==0)
return n;
else
return n+sum(n-1); /*self call to function sum() */
}
Run Code Online (Sandbox Code Playgroud)
但在这里我无法理解sum函数实际上只返回0,从代码可见,它将返回自己加n
.
那么为什么函数调用被转换为数字,函数中没有行告诉它本身也返回n除了它是0.
昨天我只想比较简单的golang HelloWorld
应用程序和c,go二进制文件就像2-3 MB
(只是fmt.Println
)等效的c代码,然而,只有大约20 kb(printf
).然后我检查了二进制文件正在进行的系统调用,使用strace
; 两者之间没有太大的区别所以你是否知道为什么golang二进制文件与c等价物相比如此庞大?
go ×4
c ×3
node.js ×3
binary ×2
compilation ×2
struct ×2
ansi-escape ×1
curl ×1
executable ×1
function ×1
https ×1
inheritance ×1
interface ×1
javascript ×1
logic ×1
oauth ×1
recursion ×1
request ×1
rest ×1
terminal ×1
twitter ×1