
# 合约结构
go语言合约即一个Go文件，包含包声明、依赖包导入、智能合约的结构体定义和方法定义。创建好合约文件后就可以进行函数开发等操作。
![](https://support.huaweicloud.com/devg-hbs/public_sys-resources/note_3.0-zh-cn.png)
合约结构中，仅合约结构体可以更改，package名和方法签名不可更改。
合约的结构如下：
```
package usercontract
// 引入必要的包  
import (
    "git.huawei.com/poissonsearch/wienerchain/contract/docker-container/contract-go/contractapi"
)  
// 声明合约的结构体  
type example01 struct {}
// 创建合约
func NewSmartContract() contractapi.Contract {
    return &example01{}
}
// 合约的初始化（Init）接口。将合约启动时，需要首先执行且只需要执行一次的逻辑放到此方法中。
func (e *example01) Init(stub contractapi.ContractStub) ([]byte, error) {
    // 编写时可灵活使用stub中的API  
}  
// 合约被调用（invoke）接口。将主要的合约执行逻辑，放到此方法内，供合约使用者调用。
func (e *example01) Invoke(stub contractapi.ContractStub) ([]byte, error) {
    // 编写时可灵活使用stub中的API  
}
```
