我正在尝试从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字符,但它也删除了重音符号。
如何仅删除不可打印的字符?
我不知道为什么传递的变量没有用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
我有以下设置来解析 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) 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正确排序。为什么?
我正在尝试暂停和恢复 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) 我正在学习围棋,在进行“围棋之旅”时,我发现了以下代码:
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()有效吗?
谢谢!/米格尔
我是 golang 的新手,有一个基本问题。我从网上的一个例子中提取了以下代码
func (d Direction) String() string {
return [...]string{"North", "East", "South", "West"}[d]
}
Run Code Online (Sandbox Code Playgroud)
我很困惑[d]方法体中的作用是什么?
在下面的代码中:
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?
我正在尝试使用 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) 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)
我的问题是为什么我们可以保证 …
go ×10
concurrency ×3
goroutine ×3
slice ×3
string ×2
arrays ×1
channel ×1
csv ×1
encryption ×1
function ×1
go-templates ×1
loops ×1
methods ×1
rc4-cipher ×1
sorting ×1
unicode ×1
utf-8 ×1