它似乎接近工作,显然只是在第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) 目前,我尝试使用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) 我试图在我尝试发送到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) 我已经看到很多帖子谈到在Go中构建自己的MUX,其中一个例子就在这里(http://thenewstack.io/building-a-web-server-in-go/).
什么时候应该使用默认值而不是定义自己的?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个.
我正在使用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)路线的东西 ,但它抱怨路由器没有这样的方法.
目前我正处理处理程序内的"自定义"条件.
使用下面的代码,当我访问/ 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.这就是嵌套看起来更灵活的原因.
我想使用 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) 我正在尝试使用 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
奇怪的是端点在邮递员那里工作得很好。
我可以知道这个请求有什么问题吗?
我使用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) 我有以下小程序。即使在使用 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 => 这不是。给出永久移动错误。