小编pet*_*rSO的帖子

为什么Go使用自己的Code生成器?

Go的当前官方编译器(http://code.google.com/p/go/)目前使用手工制作的,可以说是神秘的代码生成器,其中包括将自定义部分注入ELF二进制文件.

这种方法产生了很多与直接读取和/或写入ELF信息的实用程序相关的错误,例如ldd,objdumpstrip.

我相信这可以通过使用经过良好测试的跨平台代码生成器(例如LLVM)来防止,然后只使用OS附带的链接工具,例如ld在Unix/Linux(或ld.exe在Windows link.exe上使用MinGW),或在Windows上使用视觉工作室.

那么为什么Go使用它自己的代码生成器呢?它真的只是重新发明轮子吗?或者背后有更重要的原因吗?

code-generation elf go

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

如何将JSON转换为CSV?

我该如何修复错误?

http://play.golang.org/p/0UMnUZOUHw

// JSON to CSV in Golang
package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

type Json struct {
    RecordID int64  `json:"recordId"`
    DOJ      string `json:"Date of joining"`
    EmpID    string `json:"Employee ID"`
}

func main() {
    // reading data from JSON File
    data, err := ioutil.ReadFile("./people.json")
    if err != nil {
        fmt.Println(err)
    }
    // Unmarshal JSON data
    var d []Json
    err = json.Unmarshal([]byte(data), &d)
    if err != nil {
        fmt.Println(err)
    }
    // Create a csv file
    f, _ …
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
1
解决办法
8583
查看次数

我的频道剩余多少容量?

有没有办法在Go中的异步通道中查看剩余多少存储空间?

例如

a chan uint=make(chan bool, 5)
a<-true
fmt.Printf(a.capazity())
Run Code Online (Sandbox Code Playgroud)

go channels

4
推荐指数
1
解决办法
95
查看次数

Go中的同时变量分配不同于单个变量分配

我的印象是,尽管语法有所不同,但下面的函数a和b在逻辑上是等效的。但是,它们不是,我也不了解它们之间的区别。

在我看来,他们俩都在分配:

  • x对变量z的值,
  • y的值对应于变量x,并且
  • x + y的值等于变量y。

任何人都可以帮助消除我对多变量分配以及函数a和函数b之间的逻辑差异的误解吗?

package main

import "fmt"

func a() (int, int, int) {
    x:=1
    y:=2
    z:=3

    z = x
    x = y
    y = x+y

    return x, y, z
}

func b() (int, int, int) {
    x:=1
    y:=2
    z:=3

    z, x, y = x, y, x+y

    return x, y, z
}

func main() {
    fmt.Println(a()) // prints 2 4 1
    fmt.Println(b()) // prints 2 3 1
}
Run Code Online (Sandbox Code Playgroud)

variable-assignment go

4
推荐指数
1
解决办法
86
查看次数

Go:如何找出符文的Unicode属性?

我想找出一个符文的Unicode属性,特别是它的脚本属性的值.Unicode就是这样说的(见http://www.unicode.org/reports/tr24/第1.5节):

The script property assigns a single value to each character, either
explicitly associating it with a particular script, or assigning one
of several specail [sic] values.
Run Code Online (Sandbox Code Playgroud)

Go的unicode包为我提供了一种方式来问:"脚本x中的这个符文是什么?",但是我没办法问,"这个符文的脚本是什么?".我显然可以迭代所有脚本,但这样会浪费.找到一个符文的剧本是否有更聪明的方法?(我总是可以实现一个自组织列表,但我正在寻找已经做了我想要的标准go库中的东西,而且我忽略了.)

谢谢大家!

unicode go

4
推荐指数
1
解决办法
184
查看次数

在Space处拆分字符串,除了引号内部 - Go

我想知道是否有任何方法可以轻松地在空格中分割字符串,除非空格在引号内?

例如,改变

Foo bar random "letters lol" stuff

Foo,bar,random"letters lol" stuff

string go

4
推荐指数
2
解决办法
1662
查看次数

从切片中删除项目

我在Golang切片上遇到了一些问题.

我知道切片是指向底层数组的指针,但有些行为感觉有些奇怪.

我试图从切片中删除一个项目,我设法通过复制切片有更好的方法吗?

在下面的代码中,原始切片被更改.

package main

import (
    "fmt"
)

func main() {
    mySlice := []int{1,2,3,4,5,6}
    pos := 3

    slicePart1 := mySlice[:pos+1]
    slicePart2 := mySlice[pos+2:]

    fmt.Println(mySlice)
    fmt.Println(slicePart1)
    fmt.Println(slicePart2)
    new := append(slicePart1,slicePart2...)
    fmt.Println(new)
    fmt.Println(mySlice)
}
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
1
解决办法
106
查看次数

如何优化在 Go 中从文本文件中查找字谜

我正在尝试解决一个编码挑战,即必须从与输入字符串匹配的文本文件中打印所有字谜。程序必须尽可能快地执行。工作代码:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
    "sort"
    "strings"
    "time"
)

func timeTrack(start time.Time, name string) {
    elapsed := time.Since(start)
    log.Printf("%s took %s", name, elapsed)
}

func SortString(w string) string {
    s := strings.Split(w, "")
    sort.Strings(s)
    return strings.Join(s, "")
}

func FindWord(dict map[string]string, w string) {
    if val, ok := dict[w]; ok {
        fmt.Println("Found anagrams: ", val)
    }
}

func main() {
    defer timeTrack(time.Now(), "factorial")
    file_fullpath := os.Args[1]
    anagram_word := os.Args[2]

    f, err := os.Open(file_fullpath)
    defer f.Close()
    if …
Run Code Online (Sandbox Code Playgroud)

file go anagram

4
推荐指数
1
解决办法
936
查看次数

Why can't I get the address of a type conversion in Go?

When I compile this code, the compiler tells me that I cannot take the address of str(s).

func main() {
    s := "hello, world"
    type str string
    sp := &str(s)
}
Run Code Online (Sandbox Code Playgroud)

So my question is whether a type conversion may look for a new address to locate the current new s, or something else that I haven't thought of?

go

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

以固定步幅大小将字节读入 Go 缓冲区

我想在文件名给出的文件中一次读取和处理 1024 个字节。我不明白如何正确构建外循环,尤其是适应缓冲区包含少于 1024 字节的最终步幅

我尝试过的:

fs, _ := os.Open(filename)
defer fs.Close()
n := 1024 // 1kb
buff := make([]byte, n)
for {
    buff = make([]byte, n) // is this initialized correctly?
    n1, err := fs.Read(buff)
    if err != nil {
        if err == io.EOF {
            break
        }
        fmt.Println(err)
        break
    }
    fmt.Println("read n1 bytes...", n1)
    fmt.Println(buff)
}
Run Code Online (Sandbox Code Playgroud)

我看过以下资源:

go

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