标签: mux

我的DMux 4方式出了什么问题?

它似乎接近工作,显然只是在第7行搞砸了?

/**
 * 4-way demultiplexor.
 * {a,b,c,d} = {in,0,0,0} if sel==00
 *             {0,in,0,0} if sel==01
 *             {0,0,in,0} if sel==10
 *             {0,0,0,in} if sel==11
 */


CHIP DMux4Way {
    IN in, sel[2];
    OUT a, b, c, d;

    PARTS:
    DMux(in = in, sel = sel[0], a = out1, b = out2);

    DMux(in = out1, sel = sel[1], a = a, b = b);
    DMux(in = out2, sel = sel[1], a = c, b = d);
}
Run Code Online (Sandbox Code Playgroud)

我已经实现了我的DMux,如下所示,我只是使用它,就好像它是一棵树:

/**
 * Dmultiplexor.
 * {a,b} = …
Run Code Online (Sandbox Code Playgroud)

hdl mux nand2tetris

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

使用mux Router - 如何将我的DB传递给我的处理程序

目前,我尝试使用Go在服务器上创建一个小型Web项目进行数据处理.

我尝试将我的数据库连接传递给我的HandlerFunc(tions)但它没有按预期工作.我对golang很新,所以也许我不明白这个lang的一些基本原理.

我的主要功能如下:

func main() {

    db, err := config.NewDB("username:password@/databasename?charset=utf8&parseTime=True")
    if err != nil {
        log.Panic(err)
    }   
    env := &config.Env{DB: db} 

    router := NewRouter(env)
    log.Fatal(http.ListenAndServe(":8080", router))
}
Run Code Online (Sandbox Code Playgroud)

我的路由器:

func NewRouter(env *config.Env) *mux.Router {
    router := mux.NewRouter().StrictSlash(true)
    for _, route := range routes {
        var handler http.Handler

        handler = route.HandlerFunc
        handler = Logger(handler, route.Name)

        router.
            Methods(route.Method).
            Path(route.Pattern).
            Name(route.Name).
            Handler(handler)
    }   
    return router
}
Run Code Online (Sandbox Code Playgroud)

和我的路线:

type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
}

type Routes []Route

var …
Run Code Online (Sandbox Code Playgroud)

router go mux

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

使用MUX包将查询参数传递给Go HTTP请求处理程序

我试图在我尝试发送到Go服务器的请求中传递一个额外的参数 -

websocket.create_connection("ws://<ip>:port/x/y?token="qwerty")
Run Code Online (Sandbox Code Playgroud)

Go服务器实现如下 -

func main() {
    err := config.Parse()
    if err != nil {
        glog.Error(err)
        os.Exit(1)
        return
    }

    flag.Parse()
    defer glog.Flush()

    router := mux.NewRouter()
    http.Handle("/", httpInterceptor(router))

    router.Handle("/v1/x", common.ErrorHandler(stats.GetS)).Methods("GET")
    router.Handle("/v1/x/y", common.ErrorHandler(stats.GetS)).Methods("GET")

    var listen = fmt.Sprintf("%s:%d", config.Config.Ip, config.Config.Port)
    err = http.ListenAndServe(listen, nil)

    if err != nil {
        glog.Error(err)
        os.Exit(1)
    }
}

func httpInterceptor(router http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
        startTime := time.Now()

        if !auth.Auth(w, req) {
            http.Error(w, "Failed authentication", 401)
            return
        }

        router.ServeHTTP(w, req)

        finishTime := time.Now() …
Run Code Online (Sandbox Code Playgroud)

authentication http go mux

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

何时使用Golang的默认MUX而不是自己做

我已经看到很多帖子谈到在Go中构建自己的MUX,其中一个例子就在这里(http://thenewstack.io/building-a-web-server-in-go/).

什么时候应该使用默认值而不是定义自己的?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个.

http go mux

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

golang mux,路由通配符和自定义功能匹配

我正在使用mux包,它似乎运行得很好,除了它似乎不支持复杂的路由或至少我不知道它是如何做的.我有以下几条路线:

router := mux.NewRouter()
router.HandleFunc("/{productid}/{code}", product)
router.HandleFunc("/{user}", userHome)
router.HandleFunc("/search/price", searchPage)
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  • 如何定义/ search/price/*这样的通配符路由,以便/ search/price/29923/rage/200/color = red等请求可以匹配?

  • 是否可以向现有路线添加自定义条件?例如,如果路由是/{productid}/{code}和函数x返回true,请使用此handlerTrue,如果它返回falseuse handlerFalse.

我试图添加类似.MatcherFunc(myfunction(ip)bool)路线的东西 ,但它抱怨路由器没有这样的方法.

目前我正处理处理程序内的"自定义"条件.

go mux

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

嵌套的Gorilla Mux路由器不起作用

使用下面的代码,当我访问/ test2时,它以404响应 - 未找到./ test1正常工作.这是为什么?尽管路由器实现了http.Handler接口,但是不允许嵌套吗?

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {

    mainRouter := mux.NewRouter()
    subRouter := mux.NewRouter()

    mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test1") })

    subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test2") })

    mainRouter.Handle("/", subRouter)

    http.ListenAndServe(":9999", mainRouter)
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我的主要目标是添加一些初始工作,这些工作对于subRouter中的所有路由都是常见的,并且仅适用于它们.更具体地说,我想使用Negroni作为我的中间件orchiestrator.在Negroni网站上有一个将中间件添加到路由组的示例:

router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here

Create a new negroni for the admin middleware
router.Handle("/admin", negroni.New(
  Middleware1, 
  Middleware2, 
  negroni.Wrap(adminRoutes),
)) 
Run Code Online (Sandbox Code Playgroud)

Negroni基本上执行每个参数的ServeHTTP方法,因为它们都实现了http.Handler.它按顺序执行它们,因此路由器路由将是最后的.

我熟悉SubrouterMux中的概念,但AFAIK我不能像上面的例子那样使用它,特别是我不能在mainRouter和它之间注入任何东西Subrouter.这就是嵌套看起来更灵活的原因.

go mux gorilla

6
推荐指数
3
解决办法
6641
查看次数

h.264 解码器的“无效 NAL 单元大小”是什么意思?

我想使用 Libav 将 .mkv 文件转换为 .mp4,但是当我尝试解码视频 h.264 流时,我的代码出现故障

无效的 NAL 单元大小 21274662>141

将输入拆分为 NAL 单元时出错

该流似乎包含 AVCC 额外数据,其中附件 B 格式的数据无效。无框!

无法发送数据包进行解码(“处理输入时出现错误无效数据”)

下面提供了相关的代码部分。

while(!(ret = av_read_frame(ifmt_ctx, &input_packet))&&(ret>=0)){

         if ((ret = avcodec_send_packet(avctx, &input_packet)) < 0) {
            fprintf(stderr, "Could not send packet for decoding (error '%s')\n",get_error_text(ret));
            return ret;
        }

        ret = avcodec_receive_frame(avctx, iframe);
        if (ret == AVERROR(EAGAIN)) {
            goto read_another_frame;
            /* If the end of the input file is reached, stop decoding. */
        } else if (ret == AVERROR_EOF) {
            break;
        } else …
Run Code Online (Sandbox Code Playgroud)

api decode h.264 mux libav

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

无法在 golang 中使用 gorilla mux 从 url 读取变量

我正在尝试使用 gotests 和 gomock 编写一个单元测试,以使用 gorilla 在 golang 中编写的宁静服务,但服务无法从 url 获取变量

这是我的要求

req, err := http.NewRequest("GET", "product/5b5758f9931653c36bcaf0a0", nil)
Run Code Online (Sandbox Code Playgroud)

实际终点是product/{id}

当我通过以下代码进入我的服务时

params := mux.Vars(req)
Run Code Online (Sandbox Code Playgroud)

paramsid映射应该有键映射到时却是空的5b5758f9931653c36bcaf0a0

奇怪的是端点在邮递员那里工作得很好。

我可以知道这个请求有什么问题吗?

rest unit-testing go mux gorilla

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

Web 进程在启动 golang 后 60 秒内未能绑定到 $PORT

我使用golang开发了一个rest api。我已将存储库推送到Heroku。我还在互联网上托管了一个Mysql服务器。Go rest api连接到Mysql服务器并获取和插入数据。

heroku 上的应用程序昨天工作正常。但是今天早上我在“heroku log --tail”上收到此错误:Web 进程无法在启动后 60 秒内绑定到 $PORT

这是 main.go 的代码:

package main

import (
    "os"
    "github.com/mingrammer/go-todo-rest-api-example/app"
    "github.com/mingrammer/go-todo-rest-api-example/config"
)

func main() {
    config := config.GetConfig()

    app := &app.App{}
    app.Initialize(config)
    port, ok := os.LookupEnv("PORT")

    if ok == false {
        port = "3000"
    }

    app.Run(":"+port)
}
Run Code Online (Sandbox Code Playgroud)

heroku go mux

5
推荐指数
2
解决办法
3495
查看次数

即使使用 SkipClean 后也不接受双斜线

我有以下小程序。即使在使用 SkipClean 之后,它也不接受编码的双斜杠 (%2F%2F),而单编码的斜杠工作正常。

有人可以建议这里出了什么问题吗?

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter().SkipClean(true).UseEncodedPath()
    r.HandleFunc("/", hiHandler)
    r.HandleFunc("/hi{*}", hiHandler).Methods("GET")
    http.Handle("/", r)
    http.ListenAndServe(":10801", nil)
}

func hiHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello world!")
}

Run Code Online (Sandbox Code Playgroud)

#curl http://localhost:10801/hi%2Fds => 这有效

#curl http://localhost:10801/hi%2F%2Fds => 这不是。给出永久移动错误。

go mux gorilla

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

标签 统计

mux ×10

go ×8

gorilla ×3

http ×2

api ×1

authentication ×1

decode ×1

h.264 ×1

hdl ×1

heroku ×1

libav ×1

nand2tetris ×1

rest ×1

router ×1

unit-testing ×1