在戈朗有许多使用nil的案例。例如:
func (u *URL) Parse(ref string) (*URL, error) {
refurl, err := Parse(ref)
if err != nil {
return nil, err
}
return u.ResolveReference(refurl), nil
}
但我们不能这样用它:
var str string //or var str int
str = nil
golang编译器将抛出一个can't use nil as type string in assig
在golang中制作一个简单的api,为什么教程使用
var movies = map[string]*Movie{
"tt0076759": &Movie{Title: "Star Wars: A New Hope", Rating: "8.7", Year: "1977"},
"tt0082971": &Movie{Title: "Indiana Jones: Raiders of the Lost Ark", Rating: "8.6", Yea
我正在尝试使用“Go编程语言”学习Golang,我已经读到了切片部分。他们在数组和切片之间进行比较,因为两个数组可以与==进行比较,而两个切片不能。正文内容如下:
"== operator for arrays of strings, it may be puzzling that slice
comparisons do not also work this way. There are two reasons why deep
equivalence is problematic. First, unlike array elements, the elements
of a s
我正在将一个Yaml配置文件解组到Golang struct。我想实现以下逻辑: if blacklist key is not there in yaml:
then allow everything
else if blacklist key is there but there are no values:
then block everything
else if blacklist values are there in yaml:
then filter out only the listed items 我无法区分最后两种情况。本质上两者看起来是一样的,
我试图创建包含两个元素的数组,但是我得到了一个错误
type TODO struct {
Number int
Task string
}
func main() {
var todoArr [2]TODO
fE := &TODO{Number: 10, Task: "Task1"}
sE := &TODO{Number: 11, Task: "Task2"}
todoArr[0] = fE
todoArr[1] = sE
}
不能
我有一个关于struct数组的问题,我们是否应该使用struct指针。
假设我们有Item和Cart,其中包含一组商品。
type Item struct {
Id string
Name string
Price string
}
type Cart1 struct {
Id string
Items []Item
}
或
type Cart2 struct {
Id string
Items []*Item
}
我听说当我们将一个
我正在验证来自mariadb数据库的散列,但我不确定为什么必须获取数组的一部分,而不是只传递数组。 我在golang中对令牌进行散列,如下所示: // This type is a [32]uint8
tokenHash := sha256.Sum256(([]byte(token))) 然后,我尝试将令牌散列与此处保存在数据库中的散列进行匹配 // tokenHash[:] is of type []uint8
err := m.DB.QueryRowContext(ctx, query, tokenHash[:], time.Now()) 如果我没有获取切片,我得到的错误是:sql: c
我有这个密码
var j *[33]byte
for i := range j {
fmt.Println(j[i])
}
现在,当我运行这段代码时,当我尝试在nil pointer dereference error中访问值时,我得到了j。考虑到我的指针没有初始化,我不知道为什么一开始就能够进入循环。
我知道未初始化的数组将其所有值设置为零值。那是
var a [5]int
的默认值为[0, 0, 0, 0, 0]。
但是,当您不初始化指向数组的指针时,我不明白golang做了什么。为什么range能够超越它,即使它是零?
从Golang中的切片创建自己的类型是一个好主意吗?
示例:
type Trip struct {
From string
To string
Length int
}
type Trips []Trip // <-- is this a good idea?
func (trips *Trips) TotalLength() int {
ret := 0
for _, i := range *trips {
ret += i.Length
}
return ret
}
在我的例子中创建像Trips
我有一个结构,我想用golang中的一片结构来初始化它,但我正在尝试找出是否有更有效的版本将每个新生成的结构附加到该片上:
package main
import (
"fmt"
"math/rand"
)
type LuckyNumber struct {
number int
}
type Person struct {
lucky_numbers []LuckyNumber
}
func main() {
count_of_lucky_nums := 10
// START OF SECTION I
我已经用python编写了顺序遍历,它工作得很好。
def inOrderTraverse(tree, array):
if tree is None:
return None
inOrderTraverse(tree.left,array)
array.append(tree.value)
inOrderTraverse(tree.right,array)
return array
但是,当我尝试将相同的逻辑应用于GOlang时,它不起作用。
type BST struct {
Value int
Left *BST
我刚接触过Golang,最近遇到了这个问题中描述的同样的问题:
因此,我想知道在for range循环中在该循环范围之外的任何东西中使用对象副本基本上是不合适的,比如将它传递给一个单独的函数,附加它(如问题中所描述的),等等。
如果计划对对象进行变异,将其添加到该循环范围之外的列表中,那么访问这样的对象几乎总是更合适吗,等等,因为在下一个循环中,您添加的指针将发生变化吗?
for index := range myList {
doSomething(&myList[index])
}
我正在做Go之旅中的练习,但我遇到了一个我不能解决的问题。
我正在做,我得到了这个错误:
256 x 256
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.Pic(0x100, 0x100)
/tmp/sandbox1628012103/prog.go:14 +0xcf
golang.org/x/tour/pic.Show(0xc0000001a0)
/tmp/gopath962180923/pkg/mod/golang.org/x/tour@v0
我正在尝试比较golang html/template中列表的长度。但它将永远加载到html中。
{{ $length := len .SearchData }} {{ if eq $length "0" }}
Sorry. No matching results found
{{ end }}
有人能帮我这个忙吗?
我想创建一个动态初始化的位图数据结构。我正在尝试使用golang地图来实现此目的:
type Register map[bool]*[]bool
我初始化map的方式是:
register := make(Register)
register[true] := make(*[]bool, len(arr)) // arr is the array for which i want to create the bitmap
这显然会产生编译问题,错误如下:
error: cannot make type *[]bool
我也尝试过使用指针语法:
register[true] = &(m
在Golang中有一些变量:
全局变量:var a int
局部变量:func hello() { var a int }
返回变量:func hello() (a int) {}
戈朗有时会自动加入一些变量,
但我不知道什么时候为什么?它把我弄糊涂了。
示例:
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func foo(bts []byte) {
var a User
err := json.Unmarshal(bts,
代码:
func main() {
a := []int{1, 2}
printSlice("a", a)
b := a[0:1]
printSlice("b origin", b)
b = append(b, 9)
printSlice("b after append b without growing capacity", b)
printSlice("a after append b without growing capacity", a)
b = a
下面的golang(go1.10.2)代码将产生意外的输出
package main
import (
"bytes"
"fmt"
)
func main() {
var b bytes.Buffer
//Commenting the below line will fix the problem
b.WriteString("aas-")
fmt.Printf("Before Calling - \"%s\"\n", b.String())
b = ma
在Golang中,map中的值可以是类型吗?例如,我如何创建一个mstringtype,使得它可以是这样的,
m["abc"] = int
m["def"] = string
m["ghi"] = structtype ( some structure of type structtype)
我需要这样的映射,因为我有一个函数,它有一个字符串参数,根据这个字符串参数,该函数创建了一个特定类型的变量,并执行了一些操作。因此,如果我有一个将字符串映射到类型的映射,该函数可以使用字符串参数作为键来检查该映射,以找出它需要创建哪种类型的变量。
我有一个需要从golang (go)调用的Delphi dll。我可以使用syscall.Syscall或windows.Call加载和调用动态链接库。这两种方法都能正确执行dll。dll通过更改传递给它的字符串缓冲区来返回结果。当我稍后检查字符串时,它是空的(在syscall中),或者在windows.Call中死机。我已经尝试了几种排列,但没有幸运地从应该存储结果的变量中获得我的值。
使用windows.Call的示例:
// Package getSID calls SIDgenerator and generates a SID for Retail Pro
packa
在使用"make()“创建一个长度较大的值的动态数组时,我遇到了错误"panic: runtime error: makeslice: len out out range”。
例如:
arr := make([]int, length) //length is a dynamic value
我知道,这个问题已经在这里被问到了()。但是,make方法不支持golang中"int“数据类型的最大值。它们使用基于结构类型(大小)的长度值。是否有任何预定义的API可用来查找可以在golang中声明的集合的最大长度值?
例如:
maxInt := int(^uint(0)