'Where is the message handler in go-ethereum?

I'm currently trying to figure out the Ethereum code and have learned how to send transactions to the blockchain using the client module.Here is an example of a contract call function:

func (ec *Client) CallContract(ctx context.Context, msg ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) {
var hex hexutil.Bytes
err := ec.c.CallContext(ctx, &hex, "eth_call", toCallArg(msg), toBlockNumArg(blockNumber))
if err != nil {
    return nil, err
}
return hex, nil

}

, where CallContext defined as:`

func (c *Client) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error {
if result != nil && reflect.TypeOf(result).Kind() != reflect.Ptr {
    return fmt.Errorf("call result parameter must be pointer or nil interface: %v", result)
}
msg, err := c.newMessage(method, args...)
if err != nil {
    return err
}
op := &requestOp{ids: []json.RawMessage{msg.ID}, resp: make(chan *jsonrpcMessage, 1)}

if c.isHTTP {
    err = c.sendHTTP(ctx, op, msg)
} else {
    err = c.send(ctx, op, msg)
}
if err != nil {
    return err
}

// dispatch has accepted the request and will close the channel when it quits.
switch resp, err := op.wait(ctx, c); {
case err != nil:
    return err
case resp.Error != nil:
    return resp.Error
case len(resp.Result) == 0:
    return ErrNoResult
default:
    return json.Unmarshal(resp.Result, &result)
}`

And my question is: Where is the handler for these messages implemented in go - ethereum? For example:

switch msg.name:
   case "eth_call": ...
   case "eth_sendTx": ...
          ...


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source