第 页 共 页 阅读全文
我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj1976/CoderBrowserHD 了。 主要的改造如下: 升级项目成 Android Studio 的项目 git 下载 https://github.com/zerob13/CoderBrowserHD 后的项目改造步骤如下: 1、Clone 到自己本地 2、Import Project (改成 Android Gradle projects ) 选择我们下载到本地的目录导入即可。 整个过程的选择,完全选择默认项。 修改导入过程中的error SDK 版本问题 第一个是 SDK 的 版本...阅读全文
使用FFI绑定Qt API,编译速度快。Go 跨平台 GUI...阅读全文
https://github.com/jbowes/oa...阅读全文
我们做企业级系统,权限控制主要分三类。 【功能权限】:对菜单栏目进行权限控制,查询,增加,删除,修改功能,一般来说这种对资源的权限控制模型可以做到比较统一(用户、角色、资源)。 【数据权限】:哪些人能看到哪些数据,例如淘宝本人只能看自己订单,北京地区部门领导可以看到电器类部门订单, 最高领导能看到人所有订单等等。 这种跟业务高度相关,(网络上资料暂时比较少)原理主要是对SQL语句添加where 条件 【字段权限】:订单能看到哪些字段,如供应商,看不到内部价、 出厂价等信息。 (网络上资料暂时比较少)实现原理跟数据权限控制是一致的。对SQL语句添加select 条件 这次,我们主要讲解最常用的功能权限控制的实现过程,这类WEB权限控制,在任意后端语言上都可以实现Java、Golang、PHP、...阅读全文
rpc server端(golang版本): package main import ( "errors" "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) const ( URL = "127.0.0.1:5001" ) type Args struct { A, B int } type Arith int func (t *Arith) Add(args []Args, reply *int) error { for i := 0; i < len(args); i++ { *reply += args[i].A *reply += args[i].B } return nil } func main() { arith := new(Arith) r...阅读全文
package main import ( "flag" "fmt" ) var ( root = flag.String("root", "/var/lib/docker/fakevol", "fake volumes root directory") ) func main() { wordPtr := flag.String("word", "foo", "a string") numbPtr := flag.Int("numb", 42, "an int") boolPtr := flag.Bool("fork", false, "a bool") var svar string flag.StringVar(&svar, "svar", "bar", "a string var")...阅读全文
import ( "fmt" "flag" ) func main() { var in *string = flag.String("in", "infile", "input infile...") var out *string = flag.String("out", "outfile", "input outfile...") var op *string = flag.String("op", "op..", "ops...") // 命令行使用 xxx.exe -in thisisin -out thisisout -op thisisops flag.Parse() // 解析 if nil != in { fmt.Println("inFile : ", *in, " ou...阅读全文
虽然我们提供了数据库的信息,它知道怎么连接数据库,但问题是我们保存里面有很多模型,它不知道哪个模型存到哪个数据库。这就要求我们自己来指定,也就是我们自己来实现一个数据库路由。一个数据库路由是一个拥有4个方法的类,这四个方法是:
db_for_read(model, **hints)
对于该model 用哪个数据库来读。
db_for_write(model, **hints)
对于该model用哪个数据库来写。
allow_relation(obj1, obj2, **hints)
是否允许两个对象关联到数据库。
allow_migrate(db, app_label, model_name=None, **hints...阅读全文
如果有下面的功能,Go可以让程序员更高效。 1. 数学类型的自动转换。现在做个整数跟浮点数的计算也要手动转类型。据说是为了更安全和可预测的代码。但是其他主流语言都支持自动转,大家早就习惯了。需要考虑类型安全的地方,该考虑的人自然会去考虑。 2. Polymorphism的支持。interface对多态的支持还是比较有限。down casting做不了有的时候还是不大方便。比如下面这段代码就编不过 type Base struct { xxxx } type Derived struct { Base } func main() { v1 := &Drived{} var v2 *Base v2 = v1 //编译不过 v2 = *Base(v1) //也不行 } 3. 更方便的数组的操作比如...阅读全文
https://www.calhoun.io/using-functional-options-instead-of-method-chaining-in-go...阅读全文
目录[-] 传参和传引用的问题 传slice不是传引用! 什么叫传引用? 为什么传slice不是传引用? 为什么很多人误以为slice是传引用呢? 传指针和传引用是等价的吗? 所有类型的函数参数都是传值的! 那Go语言有传引用的说法吗? 什么是引用类型, 和指针有何区别/联系 ? 总结 传参和传引用的问题 很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解. 而传参和传引用是编程语言的根本问题, 如果这个问题理解错误可能会导致很多问题. 传slice不是传引用! 首先, Go语言的函数调用参数全部是传值的, 包括 slice/map/chan 在内所有类型, 没有传引用的说法. 具体请看Go语言...阅读全文
做了下go和java的http性能的简单比较服务端直接输出字符串使用JMeterwindows下 2000的并发,测试结果很出乎意料,go不会这么差吧研究了半小时,原因如下servlet添加里加了 response.setHeader("Pragma", "no-cache"); go的测试代码里没有设置该参数设置后重新跑测试o...阅读全文
DFA:确定有穷自动机。 具体功能: 将敏感词汇保存在map中。 对敏感词汇进行过滤,将敏感词变为“*”。 对无意义符号进行忽略处理。 敏感词数据结构: { 王:{ isEnd: false 八:{ isEnd:false 蛋:{ isEnd:true } } } } 无意义符号数据结构: { "@":Null (空结构体) } package main import ( "fmt" "strings" ) type Null struct {} var sensitiveWord = make(map[string]interface{}) var Set = make(map[string]Null) const InvalidWords = " ,~,!,@,#,$,%,^,&,*,(...阅读全文
```
package main
//学习参考:http://www.runoob.com/go/go-data-types.html
import "fmt"
func main() {
//打印会换行
fmt.Println("你好");
fmt.Println("你好2");
//fmt.Println("行注释");
/**
这里是段落注释
0000
*/
//打印不换行
fmt.Print("testme");
fmt.Print("testme");
//语法的数据类型
var age int;
fmt.Println(age)
var istrue = true//写法1
va...阅读全文
最近写GOLANG项目,不使用框架,路由选择httprouter 现在想实现一个需求:在不修改httprouter源码的前提下,对所有注册的路由handle进行异常捕获。 大家都知道golang使用panic()产生异常,然后可以recover()来捕获到异常,否则主程序直接宕掉,这是我们不希望看到的。 或者全程检查error,不主动抛出异常。即便这样,可能异常依然不能避免。 既然要recover(),但又不想在每个handle里面都去recover()一遍,如果你也有这样的需求,下面讲到的可能对你有用。 func RegRouters(r *httprouter.Router) { r.GET("/", Home) r.GET("/contact", Contact) } func Hom...阅读全文
将用户传来的参数和我们的绑定 type Login struct { User string `form:"name" json:"name" binding:"required"` //这里有做简单验证,表示参数是必须的 Age string `form:"age" json:"age" binding:"required"` } 绑定url查询参数到结构体,实质就是上一步获取到参数,然后新建一个结构体,这样在golang里面就可以用新的结构体来做操作了 r.Any("/test", func(c *gin.Context) { var persion Login if c.ShouldBindQuery(&persion) == nil { fmt.Println(persion.Use...阅读全文
golang没有提供枚举支持,但是枚举在一些业务场景中却是十分重要的。举个简单的例子:发表帖子,需要对帖子做一些校验。这时我们可能就需要定义一些异常变量,这些常量自然是维护在枚举中语意更强,使用更加灵活。下面我简单介绍一下 http://www.threeperson.com 异常枚举实现思路。
#### iota 给const绑定序列值
-----------------
````
type ErrorCode int
const (
INTERNAL_ERROR ErrorCode = 1 + iota
NOT_LOGIN
NOT_EXIST_ARTICLE_ERROR
ARTICLE_TITLE_LEN_OVERFLOW
ARTICLE_CATEG...阅读全文
作为一种底层技术,区块链技术由最初的数字货币到智能合约再到如今各行业场景分布式落定应用的实现,自2008年提出至今的10年间,区块链从最初的理论构想到如今的实际场景应用落地,虽质疑重重但却一直努力前行。尤其是近两年内,区块链对于现有行业逻辑的重新构建让它无可争议地成为下一个发展的风口。 兄弟连教育Go语言+区块链培训学院是由兄弟连教育携手微软区块链领域全球最具价值专家尹成及其带领的清华水木未名教学团队所组成,学习周期为五个半月,内容涵盖Go语言、区块链密码学、分布式编程、共识算法、公链开发、以-太=坊与智能合约与DAPP开发、区块链系统框架开发超级账本与区块链3.0EOS等内容。一,组合golang 中一切 皆是类型这个和 面向对象的 概念有点像 ,但是又不太像,和javascript倒是有...阅读全文
看了源码,只找到
switch net {
case "tcp", "tcp4", "tcp6":
case "udp", "udp4", "udp6":
case "ip", "ip4", "ip6":
case "unix", "unixgram", "unixpacket":
还有类似Dial("ip6:ipv6-icmp", "2001:db8::1")这种的,所以请教大家一共有哪些可选值及其含...阅读全文
形如A.(T) 其中A只能为interface, T为类型, 可以是interface 或者其他类型. string, int, struct等. 若T为变量类型. 则用于判断转换为对应的变量类型. 这种用法可以使得一个函数接受多类型的变量. func VarType(var interface {})(err error){ switch t := var.(type){ case string: //add your operations case int8: //add your operations case int16: //add your operations default: return errors.New("no this type") } } //空接口包含所有的类型...阅读全文
应用场景(1)PC端、移动端应用或网站应用集成运单物流信息查询功能时,只需要录入单号即可完成查询,无需用户输入快递公司。(2)电商网站要在快递鸟查询或者订阅运单时,可通过单号识别先行判断物流公司后,再订阅到快递鸟。API参数一、接口描述/说明(1)该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。(2)接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。(3)接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序(4)若识别失败,快递鸟返回的匹配结果为空。(5)接口支持的消息接收方式为HTTP POST(6)请求地址:快递鸟请求系统级参数说明:备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一...阅读全文
package main import "fmt" func main() { myfunc1(88, 42, 12, 56) //传递不定数量的参数 myfunc2([]int{88, 42, 12, 56}) //传递一个数组切片 } func myfunc1(args ...int) { //接受不定数量的参数,这些参数的类型全部是int for _, arg := range args { fmt.Println(arg) } } func myfunc2(args []int) { //传递一个数组切片 for _, arg := range args { fmt.Println(arg) } } 参考资料: 《Go语言编程》 2.5.3 不定参...阅读全文
beego框架 1.定义路由: beego.Router("/UpdateState/:statename/:id", &controllers.ContentController{}, "*:UpdateState") 2.tpl中的url实现相对应的tpl文件中的url可以为< ahref="/UpdateState/FbState/{{.ID}}">{{.FbState}}其中,通过Url传递到controller中的变量有:statename,id ,对应的值分别为 "FbState",和通过{{.ID}}取得的值,例如为"3"3.controller处理: func (c *ContentController) UpdateState() { statename := c....阅读全文
Go不像其它面相对象语言一样可以写个class,然后在class里面写一堆方法,但是它也很巧妙的实现了这种效果,我们只需要在普通函数前面加个接受者(receiver,写在函数名前面的括号里面),这样编译器就知道这个函数(方法)属于哪个struct了。 下面是简单示例: type A struct { Name string} func (a A)foo() { //接收者写在函数名前面的括号里面 fmt.Println("foo")} func main() { a := A{} a.foo() //foo} 需要注意的是,因为Go不支持函数重载,所以某个接收者(receiver)的某个方法只能对应一个函数,比如下面的就属于方法重复,编译无法通过: func (a A)foo() { fmt...阅读全文
合并slice,跟合并数组一样,是比较常见的操作。映像中C++运算符重载以后,直接用加号就可以了。Golang果断不行。先开始用copy解决。 func copy(dst, src []Type) int 从来没用过这个函数,返回值和append还不一样,返回的是复制的数目。而且只能针对slice操作,不支持其他类型。能参数表也能看出,两个参数必须是同一种类型,不可以是[]Type和[]interface{}这种形式。此函数也不是追加到dst后面,而是从头开始复制。如果要追加到后面,还需要指出位置信息。copy实现的合并数组完整代码: a := []int{1, 2, 3, 4} b := []int{5, 6, 7} c := make([]int, len(a)+len(b)) copy...阅读全文
golang实现的简单http路由器,用于学习理解http。
项目地址:https://github.com/go-chinese-site/go-simple-router
发起人: @wenjiax
欢迎大家学习、改进、试用!
为了便于大家协作开发、交流,社区增加了 [Go项目协作](/go/cooperation) 节点,同时创建了专门的 QQ 群:195831198,入群提供社区账号和github账号,否则不让加入!
关于项目本身的协作、交流,尽可能的通过项目的 issue 和 本社区,其他事情通过 qq 群...阅读全文
package main import "fmt" type IAnimal interface { Run() } type Animal struct{} func (a *Animal) Escape(ianimal IAnimal) { ianimal.Run() } func (a *Animal) Run() { fmt.Printf("Animal Run.\n") } type Dog struct { s Animal } func (d *Dog) Run() { fmt.Printf("Dog Run.\n") } func main() { dog := &Dog{} dog.s.Escape(dog) //触发 Dog Run ad:=&Animal{} ad.Es...阅读全文