小编gem*_*pir的帖子

Angular 2 routerLinkActive始终对基本路径有效

我的导航栏有这个代码:

<nav>
  <a [routerLink]="['/']" [routerLinkActive]="['nav-active']">HOME</a>
  <a [routerLink]="['/about']" [routerLinkActive]="['nav-active']">ABOUT</a>
  <a [routerLink]="['/records']" [routerLinkActive]="['nav-active']">RECORDS</a>
</nav>
Run Code Online (Sandbox Code Playgroud)

问题是HOME导航点始终获取类,因为/似乎始终处于活动状态.用一个小而简单的解决方案可以避免这种情况吗?

谢谢您的帮助

编辑:

这是现在的解决方案:

[routerLinkActiveOptions] ="{exact:true}"

angular2-routing angular

26
推荐指数
2
解决办法
8989
查看次数

golang time.Since()有几个月和几年

我想尝试转换这样的时间戳:

2015-06-27T09:34:22+00:00
Run Code Online (Sandbox Code Playgroud)

到格式的时间所以它会说像9个月前1天2小时30分2秒.

类似的东西.

我使用time.Parsetime.Since达到这个目的:

6915h7m47.6901559s
Run Code Online (Sandbox Code Playgroud)

但是我如何从那里转换?这样的事情就是我想的:

for hours > 24 {
        days++
        hours -= 24
}
Run Code Online (Sandbox Code Playgroud)

但问题是,这个月不准确,因为几个月可能有28天,30天和31天.

有没有更好的方法来实现我想要的?

time duration go

20
推荐指数
2
解决办法
2万
查看次数

Angular 2登陆页面

我正在采取Angular 2和角度的第一步,我想知道如何设置登陆页面.

我的目标是每次用户在本地存储或cookie中没有令牌时显示登录页面.

我的app.component.ts看起来像这样

import {Component} from 'angular2/core';
import {ROUTER_DIRECTIVES, RouteConfig} from 'angular2/router';
import {NavbarComponent} from './navbar.component';
import {LoaderComponent} from './loader.component';
import {NameListService} from '../shared/index';
import {HomeComponent} from '../+home/index';
import {AboutComponent} from '../+about/index';

@Component({
  selector: 'g-app',
  viewProviders: [NameListService],
  templateUrl: 'app/components/app.component.html',
  directives: [ROUTER_DIRECTIVES, NavbarComponent, LoaderComponent]
})
@RouteConfig([
  {
    path: '/',
    name: 'Home',
    component: HomeComponent
  },
  {
    path: '/about',
    name: 'About',
    component: AboutComponent
  }
])
export class AppComponent {

}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,/ home和/ about也是组件.现在我想要一个无法访问导航栏的单独页面.如果用户未登录,则用户将始终登陆.

如果有人可以帮助我开始或至少指向一个好的方向,那将是非常棒的,也许可以指向一个好的角度2教程.

这是我的应用程序基于https://github.com/mgechev/angular2-seed的样板

javascript typescript angular

7
推荐指数
1
解决办法
3757
查看次数

在Angular 2应用程序中导入socket.io-client时出错

我正在尝试在我的angular 2应用程序中使用socket.io客户端并安装它和打字

我只是从'socket.io-client'导入;

但不知怎的,我从中得到了很多错误:

在此输入图像描述

我可以在我的index.html中使用lib,如果我从cdn加载脚本并将init代码放在<script>标签中但我不能在我的实际angular 2应用程序中使用它.

我在这做错了什么?

这是我的样板:https://github.com/mgechev/angular2-seed

socket.io的例子似乎已经过时了,这就是我避免它们的原因.

这就是我正在做的并且已经得到了这些错误:

import * as io from 'socket.io-client';
[...]
var socket = io('127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

所以这个问题似乎与SystemJS有关.这个https://github.com/mgechev/angular2-seed/wiki/Add-external-dependency建议我可以添加socket.io-client,它应该自动添加所有依赖项,但这似乎并非如此.

我已经尝试了完整的例子,但这也无济于事.

socket.io angular

7
推荐指数
1
解决办法
3847
查看次数

水平扩展聊天记录工作者

我已经考虑了很多,但无法想出一个我很满意的解决方案.

基本上这就是问题:记录100k + Chats(有些慢,有些更快)进入cassandra.因此保存userId,channelId,timestamp和消息.

Cassandra已经支持水平扩展,我在这里没有问题.

现在,我读取这些聊天的软件通过TCP(IRC)完成.对于顶级1k通道,通常会有300条消息/秒,而单个IRC连接无法处理我的实验.

我现在想要构建的是记录器的多个实例(使用Docker/Kubernetes)并在它们之间共享负载.理想情况下,如果我有4个工人和1k个聊天(例如).他们每个人都会加入至少250个频道.我说至少是因为我想要可选的冗余,所以我可以在同一个聊天中有2个记录器,以确保没有消息丢失.重复项没有问题,因为所有消息都有唯一的ID.

现在,我将如何最好地动态分享工人之间加入的当前渠道.我想避免拥有主人或控制点.还应该很容易添加更多的工人,然后减少其他工人的负担.

有关这种行为的好文章吗?也许已经定义了好的概念或协议?就像我说的,我想避免另一个中央控制点,所以没有rabbitmq,redis或其他什么.

编辑:我已经研究过像Raft Consensus Algorithm这样的东西了,但是我认为这没有意义,因为我不希望我的客户就共享状态达成一致,而是将它们之间的状态"平等地"分开.

parallel-processing tcp distributed-computing docker kubernetes

6
推荐指数
1
解决办法
162
查看次数

带有echo框架的golang API

我正在使用名为echo(https://github.com/labstack/echo)的轻型框架Web框架,我正在尝试使用它构建一个非常简单的API.

这是我的一条路线

 e.Get("/v1/:channel/:username", getData)
Run Code Online (Sandbox Code Playgroud)

这是getData函数,它从mysql数据库中执行一个非常简单的SELECT

func getData(c echo.Context) error {
  quote := new(Quote)  
  for rows.Next() {
        var username string
        var message string
        err = rows.Scan(&username, &message)
        checkErr(err)
        quote.username = username
        quote.message = message
  }
  log.Println(quote)

  defer rows.Close()
  return c.JSON(http.StatusOK, quote)
}
Run Code Online (Sandbox Code Playgroud)

我还有返回值的这个基本结构

type Quote struct {
    username string
    message  string
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,我现在无法弄清楚如何返回JSON.当我尝试这个代码时,来自服务器的响应总是只是{} 我尝试返回c.String工作正常并输出响应但我想返回一个JSON.

我按照这个例子,并没有真正看到这里的问题. https://github.com/labstack/echox/blob/master/recipe/crud/main.go

知道我做错了什么吗?

api json go go-echo

3
推荐指数
1
解决办法
2552
查看次数

Golang在另一个结构的方法内更改结构的值

如果我的猜测正确的话,我可能会遇到结构问题,可能还会遇到指针问题。

该结构具有一些字段和一个包含切片的字段:

type Bot struct {
    // ...
    connlist []Connection
}
Run Code Online (Sandbox Code Playgroud)

Connection看起来是这样的:

type Connection struct {
    conn       net.Conn
    messages   int32
    channels   []string
    joins      int32
    connactive bool
}
Run Code Online (Sandbox Code Playgroud)

我的问题是将的值更改connactivetrue

Bot 有一个监听连接的方法:

func (bot *Bot) ListenToConnection(connection Connection) {
    reader := bufio.NewReader(connection.conn)
    tp := textproto.NewReader(reader)
    for {
        line, err := tp.ReadLine()
        if err != nil {
            log.Printf("Error reading from chat connection: %s", err)
            break // break loop on errors
        }
        if strings.Contains(line, "tmi.twitch.tv 001") {
            connection.activateConn()
        } …
Run Code Online (Sandbox Code Playgroud)

struct pointers go slice

3
推荐指数
1
解决办法
9009
查看次数

去单位 - 测试致命和测试main()

我很擅长使用PHPUnit测试从PHP的背景进行测试.

在PHP中,我们非常热切地鼓励你需要100%的覆盖率.在Go中,我读过的关于测试的大多数东西似乎都很小,没有引发错误的东西.

比如我的小程序:

func main() {
    config = readConfig("config.json")
}

func readConfig(path string) Config {
    var cfg Config
    file, err := ioutil.ReadFile(path)
    if err != nil {
        log.Fatal(err)
    }
    err = json.Unmarshal(file, &cfg)
    if err != nil {
        log.Fatal(err)
    }
    return cfg
}

func TestCanReadConfig(t *testing.T) {
    cfg := readConfig("test_data/config.json")
    if cfg.Broker_pass != "test" || cfg.Broker_port != "3333" {
        t.Error("invalid config")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在我的例子中我会遇到覆盖问题,因为单元测试中根本没有涉及main()(应该怎么做?)

并且根本没有涵盖2 log.Fatal().

我的问题是如何在go中完全编写我的测试?我是否以不太严格的方式进行测试而不是测试每种可能的场景,或者我可以使用我可以使用php进行注释, @expectedException \InvalidArgumentException 还是应该测试主要功能?如果没有,我可以以某种方式从覆盖工具中忽略它吗?我应该考虑一个测试框架吗?大多数测试教程都很好但很短,只引入了简单的测试.

unit-testing go

1
推荐指数
1
解决办法
143
查看次数

来自Docker容器的ERR_EMPTY_RESPONSE

我一直在尝试在最近几个小时内解决这个问题,但是我陷入了困境。

我有一个非常简单的Dockerfile,看起来像这样:

FROM alpine:3.6
COPY gempbotgo /
COPY configs /configs
CMD ["/gempbotgo"]
EXPOSE 8025
Run Code Online (Sandbox Code Playgroud)

gempbotgo只是运行网络服务器和其他一些东西的go二进制文件。该网络服务器在8025上运行,并且应该向世界问好。

我的问题是暴露端口。我这样运行容器(构建后)

docker run --rm -it -p 8025:8025 asd
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,但是当我尝试在浏览器中打开127.0.0.1:8025或尝试wget时,我只是得到一个空响应。Chrome:ERR_EMPTY_RESPONSE

Windows 10系统上的防火墙使用了该端口,但不受该端口的限制。仅在我的“ Windows上的Ubuntu上的Bash”终端上运行不带容器的go二进制文件,然后浏览至127.0.0.1:8025即可顺利进行。其他地址返回了“ ERR_CONNECTION_REFUSED”,例如127.0.0.1:8030,因此该端口上肯定有活动的东西。

然后,我带着

docker exec -it e1cc6daae4cf /bin/sh
Run Code Online (Sandbox Code Playgroud)

并在那里用wget进行检查。也没有问题。使用“ Hello World”下载index.html文件

有什么想法为什么码头工人不发送任何数据?我也用docker-compose运行了我的容器,但没有任何区别。

我还在外部托管的VPS上运行了容器。那里同样的问题...(Debian)

我的代码:(注意Makefile) https://github.com/gempir/gempbotgo/tree/docker

编辑:

在收到一些评论后,我将Dockerfile更改为多阶段构建。现在是我的Dockerfile:

FROM golang:latest
WORKDIR /go/src/github.com/gempir/gempbotgo
RUN go get github.com/gempir/go-twitch-irc \
    && go get github.com/stretchr/testify/assert \
    && go get github.com/labstack/echo \
    && go get github.com/op/go-logging
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . …
Run Code Online (Sandbox Code Playgroud)

windows bash docker docker-compose

1
推荐指数
2
解决办法
2716
查看次数