小编icz*_*cza的帖子

如何删除不可打印的字符

我正在尝试从Golang中的字符串中删除不可打印的字符。

https://play.golang.org/p/Touihf5-hGH

invisibleChars := "Douglas?"
fmt.Println(invisibleChars)
fmt.Println(len(invisibleChars))

normal := "Douglas"
fmt.Println(normal)
fmt.Println(len(normal))
Run Code Online (Sandbox Code Playgroud)

输出:

Douglas?
10
Douglas
7
Run Code Online (Sandbox Code Playgroud)

第一个字符串的末尾有一个不可见的字符。

我尝试替换非ASCII字符,但它也删除了重音符号。

如何仅删除不可打印的字符?

string unicode utf-8 go

0
推荐指数
2
解决办法
55
查看次数

为什么传递的变量不能在html / template中呈现?

我不知道为什么传递的变量没有用html / template呈现

这是在浏览器中呈现的内容:

这是所有传递的变量:[0xc0000a8ec0 0xc0000a8f80 0xc0000a9040 0xc0000a9100]

城市人口州国家首都

这是日志:
$ go运行main.go

2019/11/27 11:00:39 **** => &city has &main.City{Name:"Washington D.C.", State:"", Country:"USA", Capital:false, Population:680000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"Los Angeles", State:"CA", Country:"USA", Capital:false, Population:3900000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"San Francisco", State:"CA", Country:"USA", Capital:false, Population:860000} before appending to cities ****
2019/11/27 11:00:39 **** => &city has &main.City{Name:"Tokyo", State:"", Country:"Japan", Capital:true, Population:9000000} before appending to cities ****
**** …
Run Code Online (Sandbox Code Playgroud)

go slice go-templates go-html-template google-cloud-firestore

0
推荐指数
1
解决办法
39
查看次数

将可变长度数组从 csv 解析为 struct

我有以下设置来解析 csv 文件:

package main

import (
    "fmt"
    "os"
    "encoding/csv"
)

type CsvLine struct {
    Id string
    Array1 [] string
    Array2 [] string
}


func ReadCsv(filename string) ([][]string, error) {

    f, err := os.Open(filename)
    if err != nil {
        return [][]string{}, err
    }
    defer f.Close()

    lines, err := csv.NewReader(f).ReadAll()
    if err != nil {
        return [][]string{}, err
    }
    return lines, nil
}


func main() {

    lines, err := ReadCsv("./data/sample-0.3.csv")
    if err != nil {
        panic(err)
    }

    for _, line := …
Run Code Online (Sandbox Code Playgroud)

csv string go slice

0
推荐指数
1
解决办法
163
查看次数

sort.Slice 排序不正确

abc := []byte{'a', 'c', 'b'}  
sort.Slice(abc[1:], func(i, j int) bool {
  return abc[i] < abc[j]
})
fmt.Println(string(abc)) //print acb
Run Code Online (Sandbox Code Playgroud)

上面的代码没有abc正确排序。为什么?

sorting go slice

0
推荐指数
1
解决办法
1445
查看次数

如何暂停和恢复 goroutine?

我正在尝试暂停和恢复 groutine。我知道我可以sleep跑步,但我正在寻找就像一个按钮“暂停/恢复”而不是一个计时器。

这是我的尝试。我正在使用通道的阻塞功能来暂停,并select根据通道值切换要执行的内容。但是,输出总是Running在我的情况下。

func main() {
    ctx := wctx{}
    go func(ctx wctx) {
        for {
            time.Sleep(1 * time.Second)
            select {
            case <-ctx.pause:
                fmt.Print("Paused")
                <-ctx.pause
            case <-ctx.resume:
                fmt.Print("Resumed")
            default:
                fmt.Print("Running \n")
            }
        }
    }(ctx)

    ctx.pause <- struct{}{}
    ctx.resume <- struct{}{}
}

type wctx struct {
    pause  chan struct{}
    resume chan struct{}
}
Run Code Online (Sandbox Code Playgroud)

concurrency channel go goroutine

0
推荐指数
1
解决办法
333
查看次数

为什么我可以从 Go 中的类型调用 f​​unc?

我正在学习围棋,在进行“围棋之旅”时,我发现了以下代码:

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("Good morning!")
    case t.Hour() < 17:
        fmt.Println("Good afternoon.")
    default:
        fmt.Println("Good evening.")
    }
}

Run Code Online (Sandbox Code Playgroud)

我想知道我在做什么,所以我打开了有关“时间”包的文档。

在做时t := time.Now(),根据文档,我得到一个类型 struct Time ( https://golang.org/pkg/time/#Now ),但是,为了得到我们做的小时t.Hour()。我会理解如果 t 是对象 Time 和 Hour 的一个实例,来自该对象的方法,但这不是 oop,并且 t 是一种类型,我希望像time.Hour(t)获取小时一样调用它。

你能告诉我为什么t.Hour()有效吗?

谢谢!/米格尔

methods function go

0
推荐指数
1
解决办法
51
查看次数

Golang,下面是做什么的[]

我是 golang 的新手,有一个基本问题。我从网上的一个例子中提取了以下代码

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}
Run Code Online (Sandbox Code Playgroud)

我很困惑[d]方法体中的作用是什么?

arrays go composite-literals

0
推荐指数
1
解决办法
97
查看次数

go vet - 我由 func 文字捕获的循环变量

在下面的代码中:

package main

import "fmt"

func main() {
    for i := 0; i <= 9; i++ {
        go func() {
            fmt.Println(i)
        }()
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

code$ 
code$ go install github.com/myhub/cs61a
code$ bin/cs61a 
code$ 
Run Code Online (Sandbox Code Playgroud)

以上程序不提供任何输出。

1)他们是否i在 10 个 go-routines 之间进行单一内存位置的数据竞争?

2)为什么上面的代码不打印自由变量的值i

concurrency loops go goroutine

0
推荐指数
1
解决办法
1232
查看次数

如何使用加密/rc4

我正在尝试使用 RC4 在 Go 中加密/解密一些数据。我发现 Go 在 crypto/rc4 包中提供了 rc4 算法。我尝试使用该包加密/解密数据,但密文和解密的明文不是我所期望的。

我RC4在线工具像比较这个,但我敢肯定,Go的RC4包有一些问题。因为在我用 Go rc4 加密明文并解密密文后,解密的明文'不是我加密的。我应该找其他图书馆吗?

我运行的代码是这样的。

package main

import (
    "crypto/rc4"
    "fmt"
    "log"
)

func main() {
    c, err := rc4.NewCipher([]byte("dsadsad"))
    if err != nil {
        log.Fatalln(err)
    }
    src := []byte("asdsad")
    dst := make([]byte, len(src))
    fmt.Println("Plaintext: ", src)
    c.XORKeyStream(dst, src)
    c.XORKeyStream(src, dst)
    fmt.Println("Ciphertext: ", dst)
    fmt.Println("Plaintext': ", src)
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的

Plaintext:  [97 115 100 115 97 100]
Ciphertext:  [98 41 227 117 93 79]
Plaintext':  [111 154 128 …
Run Code Online (Sandbox Code Playgroud)

encryption go rc4-cipher

0
推荐指数
1
解决办法
472
查看次数

wg.Add() 放在哪里

var wg sync.WaitGroup
var v int32 = 0 
for i = 0; i < 100; i++{
   go func(){
       wg.Add(1) // wrong place
       atomic.AddInt32(&v,1)
       wg.Done()
   } 
}
wg.Wait()
fmt.Println(v)
Run Code Online (Sandbox Code Playgroud)

这是我从这个视频中看到的一段代码https://subscription.packtpub.com/video/application_development/9781788994880/97598/97608/goroutines

v总是小于100,我认为原因可能是wg.Wait()因为我们放入wg.Add(1)匿名函数并且在同一个 goroutinewg.Done()中将被立即调用,因此 main goroutine 从阻塞状态恢复执行。

但是如果我们将wg.Add(1)放入 for 循环中, v 将始终为100

var wg sync.WaitGroup
var v int32 = 0 
for i = 0; i < 100; i++{
   wg.Add(1)
   go func(){
       atomic.AddInt32(&v,1)
       wg.Done()
   } 
}
wg.Wait()
fmt.Println(v)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我们可以保证 …

concurrency go goroutine

0
推荐指数
1
解决办法
592
查看次数