小编icz*_*cza的帖子

Go lang相当于JavaScript的charCode()方法

charCodeAt()JavaScript中的方法返回给定索引处字符的数字Unicode值,例如

"s".charCodeAt(0) // returns 115
Run Code Online (Sandbox Code Playgroud)

我将如何获取Go中相同字符串/字母的数字unicode值?

string unicode go

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

如果我正确使用频道,我是否需要使用互斥锁?

如果我正确使用频道,我是否需要使用互斥锁来防止并发访问?

concurrency mutex channel go

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

在Go中将struct字段的初始值设置为另一个的初始值

在Go中,假设我有这个结构:

type Job struct {
    totalTime int
    timeToCompletion int
}
Run Code Online (Sandbox Code Playgroud)

我初始化一个结构对象,如:

j := Job {totalTime : 10, timeToCompletion : 10}
Run Code Online (Sandbox Code Playgroud)

其中约束timeToCompletion总是等于totalTime创建结构时(它们可以稍后更改).有没有办法在Go中实现这一点,以便我不必初始化两个字段?

struct initialization go

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

golang make函数如何才能获得三个参数?

该函数make描述如下:

func make(Type, size IntegerType) Type
Run Code Online (Sandbox Code Playgroud)

当我们make用于切片有时它显示如下:

make([]int, 0, 10) 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

make功能如何采用三个参数?这size IntegerType不是Vararg.我糊涂了...

function go

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

如何将所有GET请求查询参数放入Go中的结构中?

嗨我想将查询参数转换为Go中的结构,例如我有这样的结构:

type Filter struct {
    Offset int64  `json:"offset"`
    Limit  int64  `json:"limit"`
    SortBy string `json:"sortby"`
    Asc    bool   `json:"asc"`

    //User specific filters
    Username   string `json:"username"`
    First_Name string `json:"first_name"`
    Last_Name  string `json:"last_name"`
    Status     string `json:"status"`
}
Run Code Online (Sandbox Code Playgroud)

我有一个发送GET请求该情况下,用户可以指定可选参数Offset,Limit,SortBy,Asc,Username,First_Name,Last_Name,Status.

如果这些参数是在体内发送的那么我会这样做:

b, err := ioutil.ReadAll(r.Body)
if err != nil {

    log.WithFields(logFields).Errorf("Reading Body Message:failed:%v", err)

    return
}

var filter Filter
err = json.Unmarshal(b, &filter)
Run Code Online (Sandbox Code Playgroud)

但是我无法在GET请求中发送正文,那么解决方案是什么,而不是单独获取每个参数然后将它们放入结构中?

struct http go query-parameters

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

迭代 Go 地图获取索引

为了在模板中使用revel'seven关键字,我想在使用range. 有什么办法吗?我的地图具有以下结构:

map[string][]string
Run Code Online (Sandbox Code Playgroud)

dictionary go go-templates revel

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

如何在Go中将字符串切换为特定字符?

我想提取一个字符串,直到找到一个字符.例如:

message := "Rob: Hello everyone!"
user := strings.Trim(message,
Run Code Online (Sandbox Code Playgroud)

我希望能够存储"Rob"(读取直到':'找到).

string substring go slice

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

在mongodb记录中使用time.Time

我正在集合中插入新项目。为此使用官方 mongo go 驱动程序(https://github.com/mongodb/mongo-go-driver)。

collection.InsertOne(context.Background(), map[string]interface{}{
    "string":   "test",
    "integer":  123,
    "float":    0.123,
    "array":    []string{"t", "e", "s", "t"},
    "objectid": objectid.New(),
    "time":     time.Now(),
})
Run Code Online (Sandbox Code Playgroud)

但结果我有几个属性的问题:time.Time 和 objectid.ObjectID。

  • time.Time 将作为空的对象
  • objectid.ObjectID - 作为二进制

在此处输入图片说明

我知道它只是处于 alpha 状态,但也许有人知道。是我做错了还是没有按照应有的方式实施?

go mongodb mongo-go

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

如何从golang中的数组unsafe.Pointer创建数组或切片?

一个指向数组的指针,让我们说:

p := uintptr(unsafe.Pointer(&array))
size := 5
Run Code Online (Sandbox Code Playgroud)

我无法访问变量array,上面的代码用于使其更清晰.

另外,我知道数组的大小,但size它不是常量,它会根据运行时间而变化.

现在,我想用已知的指针,大小以及数据类型初始化切片或数组.

我想出了以下代码:

data := make([]byte, size)
stepSize := unsafe.Sizeof(data[0])
for i := 0; i < size; i++ {
    data[i] = *(*byte)(unsafe.Pointer(p))
    p += stepSize
}
fmt.println(data)
Run Code Online (Sandbox Code Playgroud)

但是这个方法会进行内存复制,这可能是效率低下的,无论如何都没有复制?

PS我也试过以下两种方法,

// method 1
data := *(*[]byte)(unsafe.Pointer(p))
// method 2
data := *(*[size]byte)(unsafe.Pointer(p))
Run Code Online (Sandbox Code Playgroud)

但它会在运行时失败,我现在知道它的原因.

arrays pointers unsafe go slice

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

如何将对象流式传输到gzip json?

当前将对象转换为json和gzip的方法是:

jsonBytes, _ := json.Marshal(payload)
//gzip json
var body bytes.Buffer
g := gzip.NewWriter(&body)
g.Write(jsonBytes)
g.Close()

Run Code Online (Sandbox Code Playgroud)

这将产生一个中间的大字节缓冲区jsonBytes,其唯一目的是随后将其转换为gzip缓冲区。

有什么方法可以流化payload对象的编组,以便首先压缩它吗?

encoding json stream go

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