@startuml
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 class Client {
  context.Providers  //Provider struct(context package)
  msp.SigningIdentity  //
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 class Local {
  context.Client
  localDiscovery fab.DiscoveryService
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 class Channel {
  context.Client
  channelService fab.ChannelService  //ChannelService struct（fabsdk/provider/chpvdr package）
  channelID string
  metrics *metrics.ClientMetrics
  Providers() context.Client  //return Channel
  ChannelService() fab.ChannelService  //return channelService
  ChannelID() string  //return channelID
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 class Provider {
  cryptoSuiteConfig core.CryptoSuiteConfig
  endpointConfig fab.EndpointConfig
  identityConfig msp.IdentityConfig
  userStore msp.UserStore
  cryptoSuite core.CryptoSuite
  localDiscoveryProvider fab.LocalDiscoveryProvider
  signingManager core.SigningManager
  idMgmtProvider msp.IdentityManagerProvider
  infraProvider fab.InfraProvider
  channelProvider fab.ChannelProvider
  clientMetrics *metrics.ClientMetrics
  //为每一个参数都实现了return 方法
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 class requestContextOpts {
  timeoutType fab.TimeoutType
  timeout time.Duration
  parentContext reqContext.Context
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 interface localServiceInit  {
  Initialize(context context.Local)error
} 
}
namespace github.com\\fabric_sdk_sample\\fabric_sdk_go\\pkg\\context {
 interface serviceInit  {
  Initialize(context context.Channel)error
} 
}
@enduml