code: func (n *NetworkServerAPI) GetGateway(ctx context.Context, req *ns.GetGatewayRequest) (*ns.GetGatewayResponse, error) {
  	var id lorawan.EUI64
  	copy(id[:], req.Id)
  
  	gw, err := storage.GetGateway(storage.DB(), id)
  	if err != nil {
  		return nil, errToRPCError(err)
  	}
  
  	resp := ns.GetGatewayResponse{
  		Gateway: &ns.Gateway{
  			Id: gw.GatewayID[:],
  			Location: &common.Location{
  				Latitude:  gw.Location.Latitude,
  				Longitude: gw.Location.Longitude,
  				Altitude:  gw.Altitude,
  			},
  		},
  	}
  
  	resp.CreatedAt, _ = ptypes.TimestampProto(gw.CreatedAt)
  	resp.UpdatedAt, _ = ptypes.TimestampProto(gw.UpdatedAt)
  
  	if gw.GatewayProfileID != nil {
  		resp.Gateway.GatewayProfileId = gw.GatewayProfileID.Bytes()
  	}
  
  	if gw.FirstSeenAt != nil {
  		resp.FirstSeenAt, _ = ptypes.TimestampProto(*gw.FirstSeenAt)
  	}
  
  	if gw.LastSeenAt != nil {
  		resp.LastSeenAt, _ = ptypes.TimestampProto(*gw.LastSeenAt)
  	}
  
  	for i := range gw.Boards {
  		var gwBoard ns.GatewayBoard
  		if gw.Boards[i].FPGAID != nil {
  			gwBoard.FpgaId = gw.Boards[i].FPGAID[:]
  		}
  
  		if gw.Boards[i].FineTimestampKey != nil {
  			gwBoard.FineTimestampKey = gw.Boards[i].FineTimestampKey[:]
  		}
  
  		resp.Gateway.Boards = append(resp.Gateway.Boards, &gwBoard)
  	}
  
  	return &resp, nil
  }
docs: // GetGateway returns data for a particular gateway.