小编Tim*_*nov的帖子

如何从接口{}获取struct的成员的指针

我想将struct的指针传递给期望接口{}的函数.然后获取(通过反射)指向struct的成员的指针,然后使用此指针修改它.我已经阅读了大量的问答并尝试了很多变化,但我仍然可以让它发挥作用.

让我们考虑以下示例:

type Robot struct {
    Id int
}
f := func(i interface {}) {
    v :=  reflect.ValueOf(i).Elem().FieldByName("Id")
    ptr := v.Addr().Pointer()
    *ptr = 100
    //^ it needs to me for functions expecting the pointer: Scan(&pointerToValue)
}

robot := &Robot{}
f(robot)
println(robot.Id) //I want to get here 100
Run Code Online (Sandbox Code Playgroud)

我认为这个问题很难理解究竟是什么做了反映包的Addr()Pointer()方法..

reflection pointers go

6
推荐指数
1
解决办法
8566
查看次数

Ansible和Playbook.如何将shell命令转换为yaml语法?

我是Ansible的新手,我不明白所有人如何在Ansible/YAML语法中轻松编写shell命令.可能是我错过了解释得很好的文档页面.

例如:playbook.yml如果我想在远程计算机中执行这些命令,我需要写入什么内容:

sudo apt-get install software-properties-common
sudo apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://mariadb.biz.net.id//repo/5.5/ubuntu precise main'
Run Code Online (Sandbox Code Playgroud)

我想会是这样的:

- name: install mariadb
  apt: ...
  sudo: yes
Run Code Online (Sandbox Code Playgroud)

syntax ubuntu yaml vagrant ansible

5
推荐指数
1
解决办法
2842
查看次数

如何将内存地址(如0xc20803a000)转换为字符串?Golang

我认为问题是非常自我解释的.我想知道如何将这样的内存地址转换0xc20803a000为字符串类型.可能吗?

memory go

5
推荐指数
1
解决办法
1129
查看次数

(*T)(零)和&T {}/new(T)之间有什么区别?Golang

任何人都能解释这两种符号之间的细微差别:(*T)(nil)/new(T)&T{}.

type Struct struct {
    Field int
}

func main() {
    test1 := &Struct{}
    test2 := new(Struct)
    test3 := (*Struct)(nil)
    fmt.Printf("%#v, %#v, %#v \n", test1, test2, test3)
    //&main.Struct{Field:0}, &main.Struct{Field:0}, (*main.Struct)(nil) 
}
Run Code Online (Sandbox Code Playgroud)

看起来这个(*T)(nil)与另一个的唯一区别是它返回nil指针或没有指针,但仍然为Struct的所有字段分配内存.

memory syntax memory-management go

5
推荐指数
1
解决办法
379
查看次数

如何只将一个变量(不是结构成员)传递给text/html模板.Golang

有没有办法只将一个变量(string,int,bool)传递给模板.例如(类似的东西):

import (
    "html/template"
)

func main() {
    ....
    tmpl := template.Must(template.ParseFiles("templates/index.html"))
    mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
        varmap := map[string]interface{}{
            "var1": "value",
            "var2": 100,
        }
        tmpl.ExecuteTemplate(rw, "index", varmap)
    })

    // content of index.html
    {{define "index"}}
    {{var1}} is equal to {{var2}}
    {{end}}
}
Run Code Online (Sandbox Code Playgroud)

templates go

5
推荐指数
2
解决办法
7045
查看次数

Golang.如何使用html/template包创建循环函数

我正在尝试将循环实现为自定义函数.它需要花括号之间的迭代次数和内容,然后它应该在括号之间迭代内容n次.请看例子:

main.go

template.Must(template.ParseFiles("palette.html")).Funcs(template.FuncMap{
        "loop": func(n int, content string) string {
            var r string
            for i := 0; i <= n; i++ {
                r += content
            }
            return r
        },
    }).ExecuteTemplate(rw, index, nil)
Run Code Online (Sandbox Code Playgroud)

的index.html

{{define "index"}}
<div class="row -flex palette">
  {{loop 16}}
    <div class="col-2"></div>
  {{end}}
</div>
{{end}}
Run Code Online (Sandbox Code Playgroud)

产量

<div class="row -flex palette">
    <div class="col-2"></div>
    <div class="col-2"></div>
    <div class="col-2"></div>
    <div class="col-2"></div>
    ... 16 times
</div>
Run Code Online (Sandbox Code Playgroud)

有可能实现它吗?动机是标准功能text/template不允许仅在花括号之间迭代内容.是的,我们可以range通过"外部"数据的行动来做到这一点.

templates go

5
推荐指数
1
解决办法
4149
查看次数

如何读取文件的特定行?

我需要阅读文件的特定行。我读过的一些相关主题:golang:如何有效地确定文件中的行数?, /sf/ask/2148479721/

我已经编写了以下函数并且它按预期工作,但我有疑问:可能有更好(有效)的方法吗?

func ReadLine(r io.Reader, lineNum int) (line string, lastLine int, err error) {
    sc := bufio.NewScanner(r)
    for sc.Scan() {
        lastLine++
        if lastLine == lineNum {
            return sc.Text(), lastLine, sc.Err()
        }
    }
    return line, lastLine, io.EOF
}
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
1
解决办法
5280
查看次数

需要Git rebase参数上下文解释

经常git rebase在某个分支的上下文中使用.例如,如果我想在feature分支的顶部移动分支的基础master(基于最新的提交) - 教程说:

git checkout feature
git rebase master 
Run Code Online (Sandbox Code Playgroud)

在这样的教程之后,有很多问题.例如:如何在不签出的情况下执行相同的操作.如何使用--onto选项执行相同的操作.--onto和rebase 之间有什么区别.我可以通过一系列提交,还是必须是整个分支?等等..

我已多次阅读man page但仍有很大的差距.

所以主要问题是: git如何解析不同场景中的args以及我应该如何解释/想象它们在我脑海中?例如:

git rebase master
git rebase feature master
git rebase --onto master feature
git rebase HEAD~4 HEAD~2
git rebase --onto HEAD~4 HEAD~2
Run Code Online (Sandbox Code Playgroud)

我们假设我们有以下回购:

Z -- W (HEAD, test-branch*) 

A -- B -- C -- D -- E (master)
     \
      1 -- 2 -- 3 (feature)

test-branch is checked out.
Run Code Online (Sandbox Code Playgroud)

git github

5
推荐指数
1
解决办法
335
查看次数

如何配置ctags以使用CSS,SCSS,HTML?

我已经在stackoverflow上阅读了很多博客文章和答案,但似乎我做错了,因为我仍然有E388: Couldn't find definition错误.我做了什么:

  • 从这里下载ctags http://ctags.sourceforge.net/
  • 安装方式: ./configure && make install
  • tags+=tags;$HOME在我的.vimrc文件中设置
  • 添加一些行~/.ctags(见下文)
  • 不要ctags -R .在项目根,并得到一些警告(见下文)
  • 检查课程:tag .<C-D>,给我一个很大的课程列表(很高兴)

警告:

ctags: Warning: regcomp ([A-Za-z0-9._$]+)[ t]*[:=][ t]*{: Unmatched \{
ctags: Warning: regcomp ([A-Za-z0-9._$()]+)[ t]*[:=][ t]*function[ t]*(: Unmatched ( or \(
ctags: Warning: regcomp ([A-Za-z0-9._$]+)[ t]*[:=][ t]*[: Invalid regular expression
ctags: Warning: cannot open source file "static/img/touch/packages" : No such file or directory
Run Code Online (Sandbox Code Playgroud)

我的~/.ctags文件如下:

--exclude=*.min.js
--exclude=*.min.css
--exclude=*.map
--exclude=.backup
--exclude=.sass-cache
--exclude=vendors …
Run Code Online (Sandbox Code Playgroud)

vim ctags exuberant-ctags

5
推荐指数
1
解决办法
2636
查看次数

如何在makefile中正确使用%或*(星号)符号作为占位符?

我在创建“上下文无关/文件名不可知”makefile 来构建 C 项目时遇到问题,但每次添加新文件时都没有指定显式文件名。我有以下项目结构:

include/ #dir to store all header files
    lib1.h
    lib2.h
    ...
src/ # dir of source code
    obj/ #temporary dir for storing all .o files
        lib1.o
        lib2.o
        ...
    lib1.c # start with #include "lib1.h"
    lib2.c # the same
    ...
    main.c
Run Code Online (Sandbox Code Playgroud)

以及以下生成文件:

# dirs
IDIR=include
SDIR=src
ODIR=src/obj

_HEADS=*.h  #or maybe % percentage instead?
HEADS=$(patsubst %, $(IDIR)/%, $(_HEADS))
_OBJS=*.o
OBJS=$(patsubst %, $(ODIR)/%, $(_OBJS))
_CFILES=*.c
CFILES=$(patsubst %, $(SDIR)/%, $(_CFILES))

# compiler
GCC=gcc
CFLAGS=-I$(IDIR)

$(OBJS): $(CFILES) $(HEADS)
    $(GCC) -c -o $@ …
Run Code Online (Sandbox Code Playgroud)

c makefile

4
推荐指数
1
解决办法
6356
查看次数