zoukankan      html  css  js  c++  java
  • gorename: easy refactoring tool for Golang[转]

    To inaugurate this attempt of blog, I’ll talk about gorename a small but incredibly useful tool I just recently discovered thanks to Andrew Gerrand’s dotGo 2014 talk. Gorename’s purpose is simple yet extremely useful, it allows us to safely rename constants, functions, variables and types in Go code. Gorename is code-aware, which means you don’t need to worry about renaming the wrong thing or unintended side effects.

    Like for most Go tools, to install gorename we just need to “go get” it and, if we wish, move it to our bin folder of choice.

    ➜  go get golang.org/x/tools/cmd/gorename
    ➜  sudo mv bin/gorename /usr/local/bin #optional
    

    Once we have it available in our $PATH, the usage could not be more simple. To showcase the usage we are going to make a modification to hugo the Go software that powers this blog. Let’s go get it.

    ➜  cd /tmp/hugo # better experiment safely
    ➜  export GOPATH=$PWD # on a temporary workspace
    ➜  go get github.com/spf13/hugo
    

    Hugo is based on static files and watches for filesystem changes to reload your blog as you are updating it. To do so it uses the popular Chris Howey’s fsnotify library. It does so by getting a new watcher though thefsnotify.NewWatcher function on the hugo/watcher package.

    Now let’s say that for whatever reason you want to change that function name from NewWatcher to something more specific like NewFileSystemWatcher. Your first instinct might be to run an old fashion search&replace over all the project files, don’t! You never know which other functions might share that name. And indeed hugo implements its own NewWatcher for higher level purposes, so you might want to keep that one intact.

    This is when gorename comes in handy. To rename that function, and that one only across all the project, we just need to run this one-liner.

    ➜ gorename -from '"github.com/howeyc/fsnotify".NewWatcher' -to NewFileSystemWatcher
    Renamed 4 occurrences in 4 files in 3 packages.
    

    That’s it! gorename scanned our entire workspce and the function is renamed in both packages, fsnotify and hugo/watcher. Go into the folders and git diff for yourself. Notice the double quotes to indicate the package and the single quotes that wrap the function path.

    Gorename supports multiple scoping options, your can rename a single variable on a single file. Now go take a look a the command’s help, I’m sure you can pick it up from here.

    ➜ gorename -help
    
    ....
    
    A legal -from query has one of the following forms:
    
      "encoding/json".Decoder.Decode        method of package-level named type
      (*"encoding/json".Decoder).Decode	    ditto, alternative syntax
      "encoding/json".Decoder.buf           field of package-level named struct type
      "encoding/json".HTMLEscape            package member (const, func, var, type)
      "encoding/json".Decoder.Decode::x     local object x within a method
      "encoding/json".HTMLEscape::x         local object x within a function
      "encoding/json"::x                    object x anywhere within a package
      json.go::x                            object x within file json.go
    
      For methods, the parens and '*' on the receiver type are both optional.
    
    ....
    

    from:https://texlution.com/post/gorename/

  • 相关阅读:
    自动装配Bean
    django的models模型 关联关系和关系查询
    django的models模块查询方法
    django的models模型类的常用数据类型和选项
    linux下查看mysql日志文件的方法
    Error loading MySQLdb module: No module named 'MySQLdb'----------- django成功连接mysql数据库的方法
    Django admin 中抛出 'WSGIRequest' object has no attribute 'user'的错误
    linux搭建django项目基本步骤
    找出字符串的最长不重复字串
    判断一个字符串是不是一个合法的IP地址
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/4801001.html
Copyright © 2011-2022 走看看