我正在尝试使用Marshal函数从Go结构创建JSON.创建的JSON不包含Person结构.
我错过了什么?
http://play.golang.org/p/ASVYwDM7Fz
type Person struct {
fn string
ln string
}
type ColorGroup struct {
ID int
Name string
Colors []string
P Person
}
per := Person{
fn: "John",
ln: "Doe",
}
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
P: per,
}
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)
Run Code Online (Sandbox Code Playgroud)
生成的输出如下:
{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"],"P":{}}
Run Code Online (Sandbox Code Playgroud)
我没有在输出中看到Person.
http://golang.org/pkg/encoding/json/#Marshal
我有一种情况,即boost :: function和boost :: bind(实际上是std :: tr1 :: function和bind)在被使用时被删除.这样安全吗?我通常会避免它,但有问题的代码有点根深蒂固,我唯一的另一个选择是添加一个新线程.
typedef function<int(int)> foo_type;
foo_type* global_foo = NULL;
int actual_foo( int i, Magic* m )
{
delete global_foo;
return m->magic(i);
}
int main()
{
Magic m;
global_foo = new foo_type( bind( &actual_foo, _1, &m );
return (*global_foo)(10)
}
Run Code Online (Sandbox Code Playgroud)
绑定参数始终是普通的整数类型(实际代码中的int和指针),而不是引用.
我正在D2为Lua 编写绑定.这是一个Lua头文件.
typedef int (*lua_CFunction) (lua_State *L);
Run Code Online (Sandbox Code Playgroud)
我假设等效的D2陈述是:
extern(C) alias int function( lua_State* L ) lua_CFunction;
Run Code Online (Sandbox Code Playgroud)
Lua还提供了api功能:
void lua_pushcfunction( lua_State* L, string name, lua_CFunction func );
Run Code Online (Sandbox Code Playgroud)
如果我想推送一个D2函数,它必须是extern(C)还是我可以使用该函数?
int dfunc( lua_State* L )
{
std.stdio.writeln("dfunc");
}
extern(C) int cfunc( lua_State* L )
{
std.stdio.writeln("cfunc");
}
lua_State* L = lua_newstate();
lua_pushcfunction(L, "cfunc", &cfunc); //This will definitely work.
lua_pushcfunction(L, "dfunc", &dfunc); //Will this work?
Run Code Online (Sandbox Code Playgroud)
如果我只能使用cfunc,为什么?我不需要做那样的事情C++.我可以将C++函数的地址传递给C一切正常工作.
我有一段奇怪的代码.这很臭,但如果更清楚,我想不出方法.
我要做的是从左侧列表的尾部或右侧列表的头部删除最大的项目.我最终得到了这段代码.
if not left:
right.pop(0)
elif not right:
left.pop(-1):
elif len(left[-1]) < len(right[0]):
right.pop(0)
else:
left.pop(-1)
Run Code Online (Sandbox Code Playgroud)
条件的主体是彼此完全相同的,yuck.
是否有一种优雅的方法来重构此代码以最大限度地减少重复?
我正在尝试使用text/template包做一些简单的工作.模板顶部给出的样本就是我正在使用的样本.
如何编写'解析'文件以便template.ParseFiles()正确读取和执行它?
package main
import (
"text/template"
"os"
)
type Inventory struct {
Material string
Count uint
}
func main() {
sweaters := Inventory{"wool", 17}
tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}}")
// tmpl, err := template.New("test").ParseFiles("file.txt")
if err != nil { panic(err) }
err = tmpl.Execute(os.Stdout, sweaters)
if err != nil { panic(err) }
}
/*
Contents of file.txt:
{{.Count}} items are made of {{.Material}}
Error thrown:
panic: template: test:1: "test" is an …Run Code Online (Sandbox Code Playgroud) 问题发生在Go代码的第17行.下面是python和Go中的程序,所以你可以看到我正在尝试做什么.Python工作,我的Go尝试都失败了.已经连续阅读了golang.org,谷歌也没有看到任何内容.
def my_filter(x):
if x % 5 == 0:
return True
return False
#Function which returns a list of those numbers which satisfy the filter
def my_finc(Z, my_filter):
a = []
for x in Z:
if my_filter(x) == True:
a.append(x)
return a
print(my_finc([10, 4, 5, 17, 25, 57, 335], my_filter))
Run Code Online (Sandbox Code Playgroud)
现在,Go版本我遇到了麻烦:
package main
import "fmt"
func Filter(a []int) bool {
var z bool
for i := 0; i < len(a); i++ {
if a[i]%5 == 0 {
z = true …Run Code Online (Sandbox Code Playgroud) 我正在使用pimpl习语并想要引用前向声明类的一种方法.下面不是我正在做的,但使用相同的概念.
template< typename Class, void (Class::*Method)(void) >
struct Call
{
Call( Class* c )
: m_c(c)
{ }
void operator()( void )
{
(m_c->*Method)();
}
Class* m_c;
};
class A
{
public:
void foo( void )
{
std::cout << "A::foo\n";
}
};
// this works
void do_foo( A* a )
{
Call<A,&A::foo> c(a);
c();
}
class B;
// this doesn't compile
extern void B::bar( void );
// this is what i'd ultimately like to do
void do_bar( B* b ) …Run Code Online (Sandbox Code Playgroud) 问题说明了一切.我想要C函数调用,它返回已挂载文件系统的列表以及文件系统类型等相关信息.
我有一个键映射来构建我的项目.
noremap <F5> :make<CR>
Run Code Online (Sandbox Code Playgroud)
这非常有效.但是我有时候只构建了一个项目.在这种情况下,我使用命令:make smaller_part来构建该片段.我也喜欢这个用例的一键映射.
noremap <S-F5> :make last_arguments()<CR>
Run Code Online (Sandbox Code Playgroud)
这可能吗?一个last_arguments()并不需要的功能.这就是我想象的解决方案.重要的是我点击了一个键然后运行:使用我上次给出的参数.
我目前正在使用CMake构建项目,我有以下问题:
我有一个库,比如'C',可执行文件'L'的文件需要使用(L中的文件调用C中库的头文件)
库和可执行文件都必须在同一个项目中构建,虽然它们都经过了CMake,L中的文件似乎看不到库C提供的头文件.我必须指定相对路径到头文件中的确切目标,这一点都不好,因为某些文件层次结构可能会在某个时间点发生变化.
我不确定使用什么类型的命令来使L文件直接能够看到C头,这样我就可以这样说
#include "display.h"
Run Code Online (Sandbox Code Playgroud)
直接在L.我不想在整个地方复制标题,因为我有很多像L这样的文件.
我的Cmake文件如下所示:
对于库C(更接近文件夹层次结构的顶部):
FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})
#INCLUDE_DIRECTORIES(${CRANIOLIB_SOURCE_DIR}/include)
SET(cranioDir ${CMAKE_CURRENT_SOURCE_DIR})
SET(SOURCES
twoD.cxx
display.cxx
rotate.cxx
symmetry.cxx
normalize.cxx
real_sym_eigens.cxx
debugLib.cxx
readInputLib.cxx)
SET(cranioLib_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
ADD_LIBRARY(cranioLib ${SOURCES})
Run Code Online (Sandbox Code Playgroud)
对于可执行文件L:
FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})
INCLUDE_DIRECTORIES(${cranioDir})
ADD_EXECUTABLE(RotateSS RotateSideToSide.cxx)
TARGET_LINK_LIBRARIES(RotateSS vtkRendering cranioLib vtkHybrid vtkGraphics)
ADD_EXECUTABLE(RotateST RotateSideTwist.cxx)
TARGET_LINK_LIBRARIES(RotateST vtkRendering cranioLib vtkHybrid vtkGraphics)
ADD_EXECUTABLE(RotateUD RotateUpDown.cxx)
TARGET_LINK_LIBRARIES(RotateUD vtkRendering cranioLib vtkHybrid vtkGraphics)
Run Code Online (Sandbox Code Playgroud)
请注意,这些文件并不能完全完成这项工作 - 我需要一些帮助来确定CMake的"包含"功能,无法获得任何其他可以帮助我的技巧.
最好.