小编han*_*son的帖子

具有导出字段的私有类型

在go教程的第2天,有这个练习:

为什么拥有导出字段的私有类型可能有用?

例如:

package geometry

type point struct {
    X, Y int;
    name string;
}
Run Code Online (Sandbox Code Playgroud)

请注意,它point是小写的,因此不会导出,而字段X和Y是大写的,因此是.在我看来,为了能够访问其中一个导出的字段,您必须能够编写类似的内容.

p.X
Run Code Online (Sandbox Code Playgroud)

但为了使这成为可能,p必须有这样的声明:

var p geomitry.point;
Run Code Online (Sandbox Code Playgroud)

要么

p := new(geomitry.point);
Run Code Online (Sandbox Code Playgroud)

但这是不可能的(afaik),因为不会导出点的类型声明.

go

13
推荐指数
3
解决办法
4183
查看次数

功能实现界面

我想知道这里发生了什么.

有一个http处理程序的接口:

type Handler interface {
    ServeHTTP(*Conn, *Request)
}
Run Code Online (Sandbox Code Playgroud)

这个实现我想我明白了.

type Counter int

func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) {
    fmt.Fprintf(c, "counter = %d\n", ctr);
    ctr++;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,"Counter"类型实现了接口,因为它有一个具有所需签名的方法.到现在为止还挺好.然后给出了这个例子:

func notFound(c *Conn, req *Request) {
    c.SetHeader("Content-Type", "text/plain;", "charset=utf-8");
    c.WriteHeader(StatusNotFound);
    c.WriteString("404 page not found\n");
}

// Now we define a type to implement ServeHTTP:
type HandlerFunc func(*Conn, *Request)
func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) {
    f(c, req) // the receiver's a func; call it
}
// Convert function to attach …
Run Code Online (Sandbox Code Playgroud)

go

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

如何在Go中使用可为空的字符串参数的函数?

我已经习惯了Java的String,我们可以传递null而不是""来表示特殊含义,例如使用默认值.

在Go中,string是基本类型,因此我无法将nil(null)传递给需要字符串的参数.

我可以使用指针类型编写函数,如下所示:

func f(s *string)
Run Code Online (Sandbox Code Playgroud)

所以调用者可以将该函数称为

f(nil)
Run Code Online (Sandbox Code Playgroud)

要么

// not so elegant
temp := "hello";
f(&temp) 
Run Code Online (Sandbox Code Playgroud)

但遗憾的是不允许以下情况:

// elegant but disallowed
f(&"hello");
Run Code Online (Sandbox Code Playgroud)

接收字符串或nil的参数的最佳方法是什么?

string parameters go

11
推荐指数
2
解决办法
4103
查看次数

Go的优点和缺点是拒绝未使用的依赖项

Google的新语言Go试图通过明确要求实际使用模块中列出的所有依赖项来简化依赖项管理.编译器将拒绝向模块声明依赖关系的模块,而不使用该模块中的任何内容.

包导入自身或导入包而不引用其任何导出的标识符是非法的.

我可以想到一些明显的优点(例如更清洁的模块),但也许有一些非显而易见的优点.我能想到的唯一缺点是有一个过于迂腐的编译器,在重构过程中抱怨太多,但也许还有更多?

您是否有其他语言执行此操作的经验?这种方法的优点和缺点是什么?

dependencies language-design go

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

如何用Go实现BitSet?

我没有在Go中找到BitSet包,所以我尝试实现它.我想使用uint64数组来存储这些位.

我需要分配uint64数组的位数.使用Java,我可以定义一个带整数的构造函数.虽然Go不提供构造函数,但是当用户调用new()时如何正确初始化BitSet'对象'?

go

11
推荐指数
2
解决办法
4064
查看次数

垃圾收集和cgo

是否可以在Go句柄中生成垃圾收集器并释放通过C代码分配的内存?我道歉,我之前没有使用过C和cgo,所以我的例子可能需要一些澄清.

假设你有一些你想要使用的C库,这个库会分配一些需要手动释放的内存.我想做的是这样的事情:

package stuff

/*
#include <stuff.h>
*/
import "C"

type Stuff C.Stuff

func NewStuff() *Stuff {
    stuff := Stuff(C.NewStuff()) // Allocate memory

    // define the release function for the runtime to call
    // when this object has no references to it (to release memory)   
    // In this case it's stuff.Free()     

    return stuff

}

func (s Stuff) Free() {
    C.Free(C.Stuff(s)) // Release memory
}
Run Code Online (Sandbox Code Playgroud)

当Go运行时没有对*Stuff的引用时,垃圾收集器是否有任何方法可以调用Stuff.Free()?

我在这里有道理吗?

也许更直接的问题是:是否有可能通过编写运行时在对该对象有零引用时调用的函数,使运行时自动处理C分配内存的清理?

garbage-collection go cgo

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

SQL约束:日期A在日期B之前 - 如何?

我创建需要的字段的SQL表自=日期为=日期,但我想提出一个约束,这样不能前.我的程序将检查它,但我想学习如何使用SQL强制执行它.我之前编写过SQL,但从未真正使用过约束,也不知道它们是如何工作的.

所以问题是:使用标准SQL,我如何确保FromTo之前?

sql constraints

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

如何从Microsoft Office 2007保存ImageMSO图标?

我从Microsoft Office 2007中发现了很多漂亮的图标.你有没有想过提取并使用VBA将所有图标保存为PNG文件?

部分ImageMSO http://rabu4g.bay.livefilestore.com/y1p2SF1q63YjDjPNmK4nYMW2644r9AO2aAsE__vBYznTeXD0b4SJUU0O07fxPD0r7aO_83gCJ-8OfcOQsFKG0fQMRnTEneBU1TI/Capture.PNG

以下代码是用于从ImageMSO获取图像的代码.

Application.CommandBars.GetImageMso([name], [width], [height])
Run Code Online (Sandbox Code Playgroud)

我可以将所有内容显示为PictureBox控件并将excel文件另存为网页.但是,每个图标质量都很低.

此外,我尝试使用以下代码创建用于导出为Bitmap对象的C#Excel加载项项目.但我发现它无法导出为半透明的PNG.

stdole.IPictureDisp p = Application.CommandBars.GetImageMso(fileName, size, size);
Bitmap b = Bitmap.FromHbitmap((IntPtr)p.Handle, (IntPtr)p.hPal);
Run Code Online (Sandbox Code Playgroud)

PS.我想将所有图标保存为PNG格式,因为我需要使用它的半透明功能.它允许我在大多数背景颜色上使用所有图标而不是白色背景.

icons vba office-2007

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

库计划C++ 0x?

最近我对VC2010中对lambdas的支持感到非常兴奋.我正在慢慢开始把握这个功能在将C++转化为更好的东西方面的​​全部潜力.

但后来我意识到这种潜力在很大程度上取决于lambdas在日常库中的主流支持,如boost和QT.
有谁知道是否有计划使用C++ 0x的新功能扩展这些库?

lambdas实际上取代了对boost :: lambda的需求以及与之交互的boost中的所有内容.QT可以在所有容器中添加对lambdas的支持,甚至可以作为定义SLOTs 的替代方法

c++ qt boost c++11

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

在Go中模拟tcp连接

在Go中,TCP连接(net.Conn)是io.ReadWriteCloser.我想通过模拟TCP连接来测试我的网络代码.我有两个要求:

  1. 要读取的数据存储在字符串中
  2. 每当写入数据时,我希望它存储在某种缓冲区中,以后我可以访问它

是否有一个数据结构,或一个简单的方法来制作一个?

networking tcp go

8
推荐指数
3
解决办法
2596
查看次数