链码的结构
![](https://i-blog.csdnimg.cn/blog_migrate/0e8df2e9123152ced90989c9bd876586.png)
每个链码都包括chaincode接口,接口中又包含int方法和invoke方法;int方法是链码收到实例化或者升级交易时才会进行调用,比如链码收到invoke和query才会调用invoke方法
![](https://i-blog.csdnimg.cn/blog_migrate/2f94412d26cd45dc8e222db3e16f6d67.png)
![](https://i-blog.csdnimg.cn/blog_migrate/07bca153e7f57dfee5d2d0f1a3717e20.png)
可以再visual code新建一个chaincodea名字的go文件,实例化时传入两个参数,一个是str,一个是helloworld,给str赋上helloworld的值
![](https://i-blog.csdnimg.cn/blog_migrate/ee7f28c945a3ae55c97e306e46dad47e.png)
invoke主要包含两个方法:一个是set 给str重新设置,一个是get方法获取str的值,通过getfunctionand parameters得到当前请求的是get方法还是set 方法以及相应参数。
![](https://i-blog.csdnimg.cn/blog_migrate/6ea7b53a70cceda857f87d70406af26f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/343d04d4e30e0a051a7fc7966c020455.png)
![](https://i-blog.csdnimg.cn/blog_migrate/079ba874e2ee185e4f1c3557a7d5a5ff.png)
chaincode002_test.go
![](https://i-blog.csdnimg.cn/blog_migrate/304a901d774a8ce7c57d8faf3afd98d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/18f8edc44c61caad91b1470bc56548fc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7a60850fe656393a1a41cd23fb078030.png)
$go test -v chaincode002_test.go chaincode002.go
就可以通过init方法给str赋上helloworld的值,然后查询str的值,然后通过调用set方法修改str的值为helloworld-1111,然后再次查询str的值