我试图在Go中声明为常量,但它正在抛出一个错误.有人可以帮我解决在Go中声明常量的语法吗?
这是我的代码:
const romanNumeralDict 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)
这是错误
# command-line-arguments
./Roman_Numerals.go:9: syntax error: unexpected {
Run Code Online (Sandbox Code Playgroud) 鉴于此代码块
map[string]int {"hello":10, "foo":20, "bar":20}
Run Code Online (Sandbox Code Playgroud)
我想打印出来
foo, 20
bar, 20
hello, 10
Run Code Online (Sandbox Code Playgroud)
按从高到低的顺序
谢谢!
type Stat struct {
counters map[string]*int64
countersLock sync.RWMutex
averages map[string]*int64
averagesLock sync.RWMutex
}
Run Code Online (Sandbox Code Playgroud)
它在下面称为
func (s *Stat) Count(name string) {
s.countersLock.RLock()
counter := s.counters[name]
s.countersLock.RUnlock()
if counter != nil {
atomic.AddInt64(counter, int64(1))
return
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是我们首先锁定接收器s(这是一个类型Stat),然后如果计数器存在则我们添加它.
问题:
Q1:为什么我们需要锁定它?是什么RWMutex,甚至什么意思?
Q2:s.countersLock.RLock()- 这会锁定整个接收器还是只锁定Stat类型的计数器字段?
问题3:s.countersLock.RLock()- 这会锁定平均值字段吗?
Q4:我们为什么要使用RWMutex?我认为channel是在Golang中处理并发的首选方式?
Q5:这是什么atomic.AddInt64.在这种情况下,为什么我们需要原子?
问题6:为什么我们会在添加之前解锁?
var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
ws.send(JSON.stringify({
.... some message the I must send when I connect ....
}));
};
ws.onmessage = function (e) {
console.log('Got a message')
console.log(e.data);
};
ws.onclose = function(e) {
console.log('socket closed try again');
}
ws.onerror = function(err) {
console.error(err)
};
Run Code Online (Sandbox Code Playgroud)
当我第一次连接到套接字时,我必须首先向服务器发送消息以验证自己并订阅频道.
我遇到的问题是,有时套接字服务器不可靠,并触发对象的事件onerror和onclose事件'ws'.
问题:什么是一个好的设计模式,允许我,无论何时套接字关闭或遇到错误,等待10秒然后重新连接到套接字服务器(并重新发送到服务器的初始消息)
我们的部分代码是时间敏感的,我们需要能够预留一些东西然后在30-60秒内释放它们,我们可以做一个 time.Sleep(60 * time.Second)
我刚刚实现了时间接口,并且在测试期间使用了时间接口的存根实现,类似于这个golang-nuts讨论.
然而,time.Now()在多个站点中调用,这意味着我们需要传递一个变量来跟踪我们实际睡了多少时间.
我想知道是否有另一种方法可以在time.Now()全球范围内存根.也许进行系统调用来改变系统时钟?
也许我们可以编写自己的时间包,它基本上包裹时间包但允许我们改变它?
我们目前的实施工作很好,我是一个初学者,我很想知道是否有人有其他想法?
我试图在Go中对一片整数进行反向排序.
example := []int{1,25,3,5,4}
sort.Ints(example) // this will give me a slice sorted from 1 to the highest number
Run Code Online (Sandbox Code Playgroud)
如何对其进行排序以使其从最高到最低?所以[25 5 4 3 1]
我试过这个
sort.Sort(sort.Reverse(sort.Ints(keys)))
Run Code Online (Sandbox Code Playgroud)
资料来源:http://golang.org/pkg/sort/#Reverse
但是,我收到以下错误
# command-line-arguments
./Roman_Numerals.go:31: sort.Ints(keys) used as value
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) CREATE TABLE subscription (
magazine_id bigint,
user_id bigint,
PRIMARY KEY (magazine_id, user_id)
);
CREATE TABLE delivery (
magazine_id bigint,
user_id bigint,
FOREIGN KEY (subscription) REFERENCES subscription (magazine_id, user_id)
);
Run Code Online (Sandbox Code Playgroud)
在给定特定订阅的情况下查询交付的好方法是什么?有没有办法为列名PRIMARY KEY (magazine_id, user_id)和相应的外键分配列名,以便我可以像这样查询
SELECT *
FROM subscription
JOIN delivery ON (delivery.subscription_fk = delivery.subscription_pk);
Run Code Online (Sandbox Code Playgroud)
注意:我可以写这样的东西:
SELECT *
FROM subscription
JOIN delivery ON (delivery.magazine_id = subscription.magazine_id
AND delivery.user_id = subscription.user_id);
Run Code Online (Sandbox Code Playgroud)
但是,我的印象是,实现这一目标的方式不那么冗长.
有什么区别
t.boolean :is_live, index: true
Run Code Online (Sandbox Code Playgroud)
和
add_index :table_name, :is_live
Run Code Online (Sandbox Code Playgroud)
如果没有区别,那么为什么只能add_index在schema.rb中反映出来.当我使用时index: true,我实际上无法看到索引schema.rb.我应该只使用这种add_index方法.
使用该add_index方法时,我可以在schema.rb中看到这一点
add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah
Run Code Online (Sandbox Code Playgroud) 以下用作打开文件的功能
func openFile(filename string) {
var file *os.File
var err error
if file, err = os.Open(filename); err != nil {
log.Printf("Failed to open the file: %s.", filename)
return
}
defer file.Close()
// blahblahblah
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用:=来声明变量文件时,这不起作用
func updateFrequencies(filename string, frequencyForWord map[string]int) {
if file, err := os.Open(filename); err != nil {
....
}
}
Run Code Online (Sandbox Code Playgroud)
错误:./ word_frequencies_2.go:30:undefined:file
但是,如果我稍微改变一下,这是有效的
file, err := os.Open(filename)
if err != nil {
log.Printf("Failed to open the file: %s.", filename)
return
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用:=作为if语句的一部分?
go ×7
activerecord ×1
javascript ×1
join ×1
migration ×1
natural-join ×1
postgresql ×1
sql ×1
unit-testing ×1
websocket ×1