小编icz*_*cza的帖子

在golang中打印切片的地址

我在golang上很新.在这里,我有一个问题困惑了我一段时间.我知道我们应该使用"&"来获取地址,但如果我们在没有"&"的切片上使用printf会怎么样?

package main

import "fmt"

var slice = []int{1, 2, 3, 4}

func main() {

   fmt.Printf("address of slice %p \n", slice)

   fmt.Printf("address of slice %p \n", &slice)

}
Run Code Online (Sandbox Code Playgroud)

结果在我的MacBook上是这样的:

片的地址0x11354d0

片的地址0x1128be0

先感谢您!

arrays pointers go slice

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

Golang 替换任何和所有换行符

通常,当我替换换行符时,我会跳转到 Regexp,就像在这个 PHP 中一样

preg_replace('/\R/u', "\n", $String);
Run Code Online (Sandbox Code Playgroud)

因为我知道这是一种非常耐用的方法来替换任何类型的 Unicode 换行符(无论是 \n、\r、\r\n 等)

我也试图在 Go 中做这样的事情,但我得到了

解析正则表达式时出错:转义序列无效: \R

在这条线上

msg = regexp.MustCompilePOSIX("\\R").ReplaceAllString(html.EscapeString(msg), "<br>\n")
Run Code Online (Sandbox Code Playgroud)

我尝试(?:(?>\r\n)|\v)/sf/answers/307242001/使用,但看起来 Go 的正则表达式实现也不支持,恐慌invalid or unsupported Perl syntax: '(?>'

在 Go、Regex 中替换换行符的好、安全方法是什么?


我在这里看到这个答案Golang: Issues replace newlines in a string from a text file say to use \r?\n,但我不敢相信它会得到所有的Unicode 换行符,主要是因为这个问题的答案列出了更多的换行符代码点\r?\n涵盖的 3 个,

regex string go

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

如何检查切片头?

这是从切片略微修改的代码

var buffer [256] byte

func SubtractOneFromLength(slice []byte) []byte {
    slice = slice[0 : len(slice)-1]
    return slice
}

func main() {
    slice := buffer[10:20]
    fmt.Println("Before: len(slice) =", len(slice))
    newSlice := SubtractOneFromLength(slice)
    fmt.Println("After:  len(slice) =", len(slice))
    fmt.Println("After:  len(newSlice) =", len(newSlice))
    newSlice2 := SubtractOneFromLength(newSlice)
    fmt.Println("After:  len(newSlice2) =", len(newSlice2))
}
Run Code Online (Sandbox Code Playgroud)

它表示slice参数的内容可以通过函数修改,但其标题不能.如何在屏幕上打印newSlice2的标题?

go slice

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

Golang trimPrefix 来自字符串“\”

我已经看到 golang 有函数func TrimPrefix(s, prefix string) string返回 s 没有提供的前导前缀字符串。

我的问题是我有一个以字符“\”开头的字符串(例如“\foo”)。当我尝试使用 TrimPrefix 时出现错误。

高朗代码:

var s = "\foo"
    s = strings.TrimPrefix(s, "\")
    fmt.Print(s)
Run Code Online (Sandbox Code Playgroud)

错误:

./prog.go:10:32: newline in string
./prog.go:10:32: syntax error: unexpected newline, expecting comma or )
Run Code Online (Sandbox Code Playgroud)

我已经看到这是由于 golang understang "\" 作为 scape 字符。你知道我是否可以使用任何 golang 选项来让 golang 明白我不想使用“\”作为转义字符?

string go

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

如何从golang中的切片获取结构指针

这是代码:

package main

import (
    "fmt"
)

type demo struct {
     name string
}

func main() {
     demo_slice := make([]demo, 3)
     demo_slice[0] = demo{"str1"}
     demo_slice[1] = demo{"str2"}
     demo_slice[2] = demo{"str3"}

     point_demo_slice := make([]*demo, 3)
     for index, value := range demo_slice {
          fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
          point_demo_slice[index] = &value
     }
}
Run Code Online (Sandbox Code Playgroud)

结果:

{str1}==++++++++++++++0x20818a220

{str2}==++++++++++++++0x20818a220

{str3}==++++++++++++++0x20818a220
Run Code Online (Sandbox Code Playgroud)

0x20818a220 是最后一个元素的指针值.

为什么所有指针值都相同?

如何获得正确的指针值?

struct pointers go slice

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

推迟使用说明

我们假设我有以下功能

func printNumbers(){
 var x int

 defer fmt.Println(x)

 for i := 0; i < 5; i++{
  x++
 }
}
Run Code Online (Sandbox Code Playgroud)

正如规范中所说:

每次执行"延迟"语句时,将像往常一样评估调用的函数值和参数,并重新保存但不调用实际函数.

显然,当函数执行结束时,将打印出零.但是,如果我想打印出变量的最终值,我该怎么办x

我想出了以下解决方案:

func printNumbers(){
  var x int

  printVal := func(){
    fmt.Println(x)
  }

  defer printVal()

  for i := 0; i < 5; i++{
    x++
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有更好的方法来解决这个问题.

go deferred

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

尝试解码nil值的gob导致EOF错误

我需要使用它gob来编码一些数据,但是,我发现"type nil"无法正确处理(转1.6.2)

https://play.golang.org/p/faypK8uobF

package main

import (
    "bytes"
    "encoding/gob"
    "log"
)

type T struct {
    A int
}

func init() {
    gob.Register(map[string]interface{}{})
    gob.Register(new(T))
}
func main() {
    bys := bytes.NewBuffer(nil)
    gob.NewEncoder(bys).Encode(map[string]interface{}{
        "v": (*T)(nil),
    })
    out := map[string]interface{}{}
    if err := gob.NewDecoder(bys).Decode(&out); err != nil {
        log.Panic(err)
    }
    return
}
Run Code Online (Sandbox Code Playgroud)

输出:

panic: EOF
Run Code Online (Sandbox Code Playgroud)

null pointers go gob

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

为什么指针会产生错误“无效的间接”?

p是一个指向数组的指针arr,我们可以arr通过 using获取数组*p,但是为什么不能通过 using 获取第二个元素*p[2]

它会导致错误:

p[1] 的无效间接(int 类型)

以下代码:

arr := [4]int{1,2,3,4}
var p *[4]int = &arr
fmt.Println(p)     // output &[1 2 3 4]
fmt.Println(*p)    // output [1 2 3 4]
fmt.Println(p[1])  // output 2
fmt.Println(*p[1]) //generate an error:invalid indirect of p[1] (type int)
Run Code Online (Sandbox Code Playgroud)

arrays pointers go

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

在 Golang 中绘制具有两个半径的圆圈

我环顾四周,但找不到任何对在 golang 中绘制圆圈有用的东西。我想绘制一个具有 2 个给定(内部和外部)半径的绘图,并为它们之间的所有像素着色。

一种可能的方法是遍历每个像素并为其着色,直到创建环。虽然,这似乎非常低效。

对此的任何帮助将不胜感激!:)

image draw go

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

为什么我的go coroutines在处理后被卡住了?

我是Golang的新手.我一直在使用GORM和并发性去读取SQLite数据库并将其写入CSV文件.它工作顺利,但处理完成后,它不会结束主程序并退出.我必须打印command+c退出.我不知道我做错了什么.可能是它正在进入某种阻塞或死锁模式或其他什么.此外,它也不打印再见消息.这意味着它仍在尝试从频道中读取数据.请帮忙.这是代码.

package main

import (
    "fmt"
    "reflect"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
)

type AirQuality struct {
    // gorm.Model
    // ID      uint   `gorm:"column:id"`
    Index   string `gorm:"column:index"`
    BEN     string `gorm:"column:BEN"`
    CH4     string `gorm:"column:CH4"`
    CO      string `gorm:"column:CO"`
    EBE     string `gorm:"column:EBE"`
    MXY     string `gorm:"column:MXY"`
    NMHC    string `gorm:"column:NMHC"`
    NO      string `gorm:"column:NO"`
    NO2     string `gorm:"column:NO_2"`
    NOX     string `gorm:"column:NOx"`
    OXY     string `gorm:"column:OXY"`
    O3      string `gorm:"column:O_3"`
    PM10    string `gorm:"column:PM10"`
    PM25    string `gorm:"column:PM25"`
    PXY     string `gorm:"column:PXY"`
    SO2     string `gorm:"column:SO_2"`
    TCH     string `gorm:"column:TCH"`
    TOL     string `gorm:"column:TOL"`
    Time    string `gorm:"column:date; …
Run Code Online (Sandbox Code Playgroud)

loops channel go goroutine go-gorm

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

标签 统计

go ×10

pointers ×4

slice ×3

arrays ×2

string ×2

channel ×1

deferred ×1

draw ×1

go-gorm ×1

gob ×1

goroutine ×1

image ×1

loops ×1

null ×1

regex ×1

struct ×1