我知道我可以迭代一张地图m,
for k, v := range m { ... }
Run Code Online (Sandbox Code Playgroud)
并寻找一个键,但有一种更有效的方法来测试一个键在地图中的存在吗?
我在语言规范中找不到答案.
我想做一个go get:
go get github.com/go-sql-driver/mysql
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误:
package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath
Run Code Online (Sandbox Code Playgroud)
当我这样做时go env,Go值列表如下所示:
ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud)
显然没有设置GOPATH,我如何设置它?
我看到许多线程提到了这个错误,但没有提供我的问题的答案,需要编辑哪个文件以提供此路径的值?
我正在尝试在Go中创建和使用自定义包.这可能是非常明显的事情,但我找不到太多关于此的信息.基本上,我在同一个文件夹中有这两个文件:
mylib.go
package mylib
type SomeType struct {
}
Run Code Online (Sandbox Code Playgroud)
main.go
package main
import (
"mylib"
)
func main() {
}
Run Code Online (Sandbox Code Playgroud)
当我尝试时go run main.go,我收到此错误:
main.go:4:2: import "mylib": cannot find package
Run Code Online (Sandbox Code Playgroud)
我试图先运行go build mylib.go但它似乎没有做任何事情(没有生成文件,没有错误信息).所以任何想法我怎么能这样做?
我想在gorilla/mux路由和路由器类型上添加一个方便的util方法:
package util
import(
"net/http"
"github.com/0xor1/gorillaseed/src/server/lib/mux"
)
func (r *mux.Route) Subroute(tpl string, h http.Handler) *mux.Route{
return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
func (r *mux.Router) Subroute(tpl string, h http.Handler) *mux.Route{
return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
Run Code Online (Sandbox Code Playgroud)
但是编译器通知我
无法在非本地类型mux.Router上定义新方法
那我怎么做到这一点?我是否创建了一个具有匿名mux.Route和mux.Router字段的新结构类型?或者是其他东西?
我有以下代码:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
)
type twitterResult struct {
Results []struct {
Text string `json:"text"`
Ids string `json:"id_str"`
Name string `json:"from_user_name"`
Username string `json:"from_user"`
UserId string `json:"from_user_id_str"`
}
}
var (
twitterUrl = "http://search.twitter.com/search.json?q=%23UCL"
pauseDuration = 5 * time.Second
)
func retrieveTweets(c chan<- *twitterResult) {
for {
resp, err := http.Get(twitterUrl)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
r := new(twitterResult) //or &twitterResult{} which returns *twitterResult
err …Run Code Online (Sandbox Code Playgroud) 我想实现这样的代码,其中B继承自A并且只覆盖A的Foo()方法,我希望代码打印B.Foo(),但它仍然打印A.Foo(),似乎接收器在Golang在C++中无法像这样工作,在启用动态绑定的情况下,代码可以像我想要的那样工作.
我还发布了另一段代码,但它实现起来太难了,而且更像是一种黑客方式,我认为它不是Golang风格.
所以我的问题是:如果父的Bar()方法有一些逻辑,例如,打开一个文件,然后读取一些行,并使用Foo()将这些行输出到stdout,并将Child(在示例中为B)想要使用它们中的大多数,唯一的区别是Child希望Foo()将行输出到另一个文件.我该如何实施呢?我听说Golang的继承不能像C++或Java那样工作,Golang中的正确方法是什么?
package main
import (
"fmt"
)
type A struct {
}
func (a *A) Foo() {
fmt.Println("A.Foo()")
}
func (a *A) Bar() {
a.Foo()
}
type B struct {
A
}
func (b *B) Foo() {
fmt.Println("B.Foo()")
}
func main() {
b := B{A: A{}}
b.Bar()
}
output: A.Foo()
Run Code Online (Sandbox Code Playgroud)
以下作品有效,但写作时
a := A{}
a.Bar()
Run Code Online (Sandbox Code Playgroud)
您将遇到编译器错误
package main
import (
"fmt"
)
type I interface {
Foo()
}
type A struct {
i I
}
func (a *A) …Run Code Online (Sandbox Code Playgroud) 当我们使用gdb调试程序时,我们通常会看到在libc(glibc?)中定义了奇怪名称的函数.我的问题是:
在Golang,我正在寻找一种有效的方法来确定文件的行数.
当然,我总是可以循环遍历整个文件,但似乎效率不高.
file, _ := os.Open("/path/to/filename")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
lineCount++
}
fmt.Println("number of lines:", lineCount)
Run Code Online (Sandbox Code Playgroud)
是否有更好(更快,更便宜)的方式来查找文件有多少行?
请看下面我的地图
var romanNumeralDict map[int]string = map[int]string{
1000: "M",
900 : "CM",
500 : "D",
400 : "CD",
100 : "C",
90 : "XC",
50 : "L",
40 : "XL",
10 : "X",
9 : "IX",
5 : "V",
4 : "IV",
1 : "I",
}
Run Code Online (Sandbox Code Playgroud)
我希望按照键的大小顺序遍历此映射
for k, v := range romanNumeralDict {
fmt.Println("k:", k, "v:", v)
}
Run Code Online (Sandbox Code Playgroud)
然而,这打印出来
k: 1000 v: M
k: 40 v: XL
k: 5 v: V
k: 4 v: IV
k: 900 v: CM
k: …Run Code Online (Sandbox Code Playgroud) 我想从go程序的原始stdin中读取.例如,如果我这样做stdin,我希望能够访问"test stdin".我试过读echo test stdin | go run test.go,但如果没有,那么它会等待输入.我也尝试先检查大小,但os.Stdin即使传入输入也是0.
我能做什么?
go ×9
linux ×2
c ×1
dictionary ×1
gnu ×1
go-map ×1
http ×1
import ×1
inheritance ×1
oop ×1
overriding ×1
package ×1
ubuntu ×1