小编icz*_*cza的帖子

何时使用Golang的默认MUX而不是自己做

我已经看到很多帖子谈到在Go中构建自己的MUX,其中一个例子就在这里(http://thenewstack.io/building-a-web-server-in-go/).

什么时候应该使用默认值而不是定义自己的?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个.

http go mux

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

为什么无法从子类访问受保护的方法?

请考虑以下代码段:

package vehicle;

public abstract class AbstractVehicle {
    protected int speedFactor() {
        return 5;
    }
}

package car;

import vehicle.AbstractVehicle;

public class SedanCar extends AbstractVehicle {
    public static void main(String[] args) {
        SedanCar sedan = new SedanCar();
        sedan
                .speedFactor();
        AbstractVehicle vehicle = new SedanCar();
        // vehicle //WON'T compile
        // .speedFactor();
    }
}
Run Code Online (Sandbox Code Playgroud)

SedanCarAbstractVehicle包含protected方法的子类speedFactor.speedFactor如果它被同一个类引用,我可以调用该方法.当超类用于参考时,该方法speedFactor不可访问.

隐藏方法的原因是什么?

java oop inheritance encapsulation access-specifier

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

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

如何检查路径上的目录是否为空?

如果文件夹为空,如何检查Go?我可以检查:

files, err := ioutil.ReadDir(*folderName)
if err != nil {
    return nil, err
}

// here check len of files 
Run Code Online (Sandbox Code Playgroud)

但是我觉得应该有更优雅的解决方案.

directory go

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

Do Go实现存储地图的长度?

是否将map其长度存储在某处或者是否在每次调用时进行计算len(my_map)

语言规范为地图显示了这一点,这实际上没有帮助:

map元素的数量称为其长度.对于地图m,可以使用内置函数发现它,len并且可以在执行期间进行更改.可以在执行期间使用赋值添加元素,并使用索引表达式检索元素; 可以使用delete内置函数删除它们.

在"长度和容量"部分下,我们看到:

表达len(s)如果是常数s是一个string常数.表达式len(s)cap(s)常量,如果类型s是a arraypointera array并且表达式s不包含channel接收或(非常量)函数调用; 在这种情况下s不评估.否则,调用lencap不是常量并s进行评估.

所以它告诉我们这s不是常数并且被评估但是它没有说明它是否像对待slice类型一样被查找为存储值.

dictionary go

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

如何在Go中存储对操作结果的引用?

好吧用文字描述它很难,但是假设我有一个存储int指针的地图,并希望将操作的结果存储为我的哈希中的另一个键:

m := make(map[string]*int)

m["d"] = &(*m["x"] + *m["y"])
Run Code Online (Sandbox Code Playgroud)

这不起作用,并给我错误: cannot take the address of *m["x"] & *m["y"]

思考?

dictionary pointers go

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

如何在go中找到数组的大小

我尝试过len()函数,但它给出了声明的值.该size()函数给出了错误.

码:

package main
var check [100]int
func main() {
    println(len(check))
}
Run Code Online (Sandbox Code Playgroud)

输出在100这里,我需要数组中的总项目(即0).

arrays go

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

如何检查interface {}是否为切片

我是Go的菜鸟:)所以我的问题可能是愚蠢的,但找不到答案,所以.

我需要一个功能:

func name (v interface{}) {
    if is_slice() {
        for _, i := range v {
            my_var := i.(MyInterface)
            ... do smth
        }
    } else {
        my_var := v.(MyInterface)
        ... do smth
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能is_slice去Go?感谢任何帮助.

interface type-conversion go slice

7
推荐指数
2
解决办法
6357
查看次数

如何将 float64 数字截断为特定精度?

我想截断1.234567为3位小数浮点数,但结果不是我想要的。

例如:1.234567=>1.234

package main

import (
    "strconv"
    "fmt"
)

func main() {
    f := 1.234567
    fmt.Println(strconv.FormatFloat(f, 'f', 3, 64)) //1.235
    fmt.Printf("%.3f", f) //1.235
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何在 Go 中做到这一点?

floating-point truncate go

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

寄存器类型后gob decode无法解码接口

我定义了这些类型:

func init() {
    gob.RegisterName("MyMessageHeader", MyMessageHeader{})
    gob.RegisterName("OtherMsg", OtherMsg{})
}

//
// Messages
//

type MyMessageHeader struct {
    MessageId InstanceIdType
    OtherId   uint64
}

type MyMessage interface {
    Id() *MyMessageHeader
}

type otherStruct struct {
    X uint8
    Y uint8
}
type OtherMsg struct {
    MyMessageHeader
    OtherField *otherStruct
}


func (m *OtherMsg) Id() *MyMessageHeader {
    return &m.MyMessageHeader
}

func MarshalMessage(m MyMessage) ([]byte, error) {
    var buff bytes.Buffer
    encoder := gob.NewEncoder(&buff)
    if err := encoder.Encode(&m); err != nil {
        return nil, errors.Newf("Could not marshal …
Run Code Online (Sandbox Code Playgroud)

methods interface go gob

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