Golang调用/调用子项目的最佳方式

时间:2017-05-03 04:51:13

标签: go

我正在将我的项目从public class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "contacts.db"; private static final String TABLE_NAME = "contacts"; private static final String COLUMN_ID = "id"; private static final String COLUMN_FORENAME = "name"; private static final String COLUMN_SURNAME = "Surname"; private static final String COLUMN_UNAME = "uname"; private static final String COLUMN_PASS = "pass"; private static final String COLUMN_DOB = "D.O.B"; private static final String COLUMN_CONTACTNO = "contact_number"; SQLiteDatabase db; private static final String TABLE_CREATE ="create table contacts (id integer primary key , forename text ," + " surname text , uname text , pass text , D.O.B integer ,contact_number integer )"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); this.db = db; } public void insertContact(Contact c) { db = this.getWritableDatabase(); ContentValues values = new ContentValues(); String query = "Select * from contacts"; Cursor cursor = db.rawQuery(query, null); int count = cursor.getCount(); values.put(COLUMN_ID, count); values.put(COLUMN_FORENAME, c.getForename()); values.put(COLUMN_SURNAME, c.getSurname()); values.put(COLUMN_UNAME, c.getUname()); values.put(COLUMN_PASS, c.getPass()); values.put(COLUMN_DOB, c.getDOB()); values.put(COLUMN_CONTACTNO, c.getContactNo()); db.insert(TABLE_NAME, null, values); db.close(); } public String searchPass(String uname) { db = this.getReadableDatabase(); String query = "Select uname,pass from "+TABLE_NAME; Cursor cursor = db.rawQuery(query, null); String a, b; b = "not found"; if(cursor.moveToFirst()){ do{ a = cursor.getString(0); if(a.equals(uname)){ b = cursor.getString(1); break; } } while(cursor.moveToNext()); } return b; } public boolean updateData(String uname, String pass, String contactNo ){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_UNAME, uname); contentValues.put(COLUMN_PASS, pass); contentValues.put(COLUMN_CONTACTNO, contactNo); db.update(TABLE_NAME, contentValues, "uname = ?", new String[] { uname }); return true; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String query = "Drop table IF EXISTS "+TABLE_NAME; db.execSQL(query); this.onCreate(db); } } 移动到PHP,我正在寻找从Golang {{到sub project main.go调用/调用/处理控制的有效方式1}},我想从

传递控制权
src

我是main.go的新手我不知道如何以最佳方式做到这一点,我的项目结构是

http://localhost/  =>   http://localhost/sub-project1/
http://localhost/  =>   http://localhost/sub-project2/
http://localhost/  =>   http://localhost/sub-projectn/

我正在使用Golang进行路由,位于src/ main.go sub-project1/ main.go sub-project2/ main.go sub-projectn/ main.go gitHub.com/ ...... golang.org/ ...... 下的httprouter包含以下

main.go

并且所有文件都必须从src package main import .... // homePageHandler // contactPageHandler // aboutPageHandler // loginPageHandler // signupPageHandler func main() { router := httprouter.New() router.GET("/", homePageHandler) router.GET("/contact", contactPageHandler) router.GET("/about", aboutPageHandler) router.GET("/login", loginPageHandler) router.GET("/signup", signupPageHandler) // here I want to pass control to my sub project main.go // and I don't want to write any /sub-project routing urls here, // because each /sub-project's contain many urls router.GET("/sub-project1", ??????) router.GET("/sub-project2", ??????) router.GET("/sub-project3", ??????) router.GET("/sub-projectn", ??????) } 传递,因为整个项目只有一个src并且在任何main.go main()里面我想要这样做< / p>

/sub-projectx

1 个答案:

答案 0 :(得分:3)

Golang 源代码没有通过解释器运行,而是内置到二进制文件中,在动态项目的情况下灵活性较低。也就是说,我保持我的项目彼此孤立,并让 Nginx (例如)处理多个项目分组。当然,这需要一些重构,比如创建共享包等等。

或者不是

如果由于某种原因,您仍然认为通过单个二进制文件运行多个项目是可以的,那么这是您的选择。在这种情况下,您可能会查看某些框架中可用的路径分组。这是what Go Gin provides

func main() {
    router := gin.Default()

    // Simple group: v1
    v1 := router.Group("/v1")
    {
        v1.POST("/login", loginEndpoint)
        v1.POST("/submit", submitEndpoint)
        v1.POST("/read", readEndpoint)
    }

    // Simple group: v2
    v2 := router.Group("/v2")
    {
        v2.POST("/login", loginEndpoint)
        v2.POST("/submit", submitEndpoint)
        v2.POST("/read", readEndpoint)
    }

    router.Run(":8080")
}