Go的当前官方编译器(http://code.google.com/p/go/)目前使用手工制作的,可以说是神秘的代码生成器,其中包括将自定义部分注入ELF二进制文件.
这种方法产生了很多与直接读取和/或写入ELF信息的实用程序相关的错误,例如ldd,objdump或strip.
我相信这可以通过使用经过良好测试的跨平台代码生成器(例如LLVM)来防止,然后只使用OS附带的链接工具,例如ld在Unix/Linux(或ld.exe在Windows link.exe上使用MinGW),或在Windows上使用视觉工作室.
那么为什么Go使用它自己的代码生成器呢?它真的只是重新发明轮子吗?或者背后有更重要的原因吗?
我该如何修复错误?
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中的异步通道中查看剩余多少存储空间?
例如
a chan uint=make(chan bool, 5)
a<-true
fmt.Printf(a.capazity())
Run Code Online (Sandbox Code Playgroud) 我的印象是,尽管语法有所不同,但下面的函数a和b在逻辑上是等效的。但是,它们不是,我也不了解它们之间的区别。
在我看来,他们俩都在分配:
任何人都可以帮助消除我对多变量分配以及函数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) 我想找出一个符文的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库中的东西,而且我忽略了.)
谢谢大家!
我想知道是否有任何方法可以轻松地在空格中分割字符串,除非空格在引号内?
例如,改变
Foo bar random "letters lol" stuff
成
Foo,bar,random和"letters lol" stuff
我在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) 我正在尝试解决一个编码挑战,即必须从与输入字符串匹配的文本文件中打印所有字谜。程序必须尽可能快地执行。工作代码:
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) 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?
我想在文件名给出的文件中一次读取和处理 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)
我看过以下资源: