我已经看到很多帖子谈到在Go中构建自己的MUX,其中一个例子就在这里(http://thenewstack.io/building-a-web-server-in-go/).
什么时候应该使用默认值而不是定义自己的?Go文档和博客文章都没有说明为什么你应该使用一个而不是另一个.
请考虑以下代码段:
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)
SedanCar是AbstractVehicle包含protected方法的子类speedFactor.speedFactor如果它被同一个类引用,我可以调用该方法.当超类用于参考时,该方法speedFactor不可访问.
隐藏方法的原因是什么?
Go中有什么与init()包内的内容相反吗?
如果文件夹为空,如何检查Go?我可以检查:
files, err := ioutil.ReadDir(*folderName)
if err != nil {
return nil, err
}
// here check len of files
Run Code Online (Sandbox Code Playgroud)
但是我觉得应该有更优雅的解决方案.
是否将map其长度存储在某处或者是否在每次调用时进行计算len(my_map)?
语言规范为地图显示了这一点,这实际上没有帮助:
map元素的数量称为其长度.对于地图m,可以使用内置函数发现它,len并且可以在执行期间进行更改.可以在执行期间使用赋值添加元素,并使用索引表达式检索元素; 可以使用delete内置函数删除它们.
在"长度和容量"部分下,我们看到:
表达
len(s)如果是常数s是一个string常数.表达式len(s)和cap(s)常量,如果类型s是aarray或pointeraarray并且表达式s不包含channel接收或(非常量)函数调用; 在这种情况下s不评估.否则,调用len和cap不是常量并s进行评估.
所以它告诉我们这s不是常数并且被评估但是它没有说明它是否像对待slice类型一样被查找为存储值.
好吧用文字描述它很难,但是假设我有一个存储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"]
思考?
我尝试过len()函数,但它给出了声明的值.该size()函数给出了错误.
码:
package main
var check [100]int
func main() {
println(len(check))
}
Run Code Online (Sandbox Code Playgroud)
输出在100这里,我需要数组中的总项目(即0).
我是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?感谢任何帮助.
我想截断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 中做到这一点?
我定义了这些类型:
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)